IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIyBsYW5ndWFnZXMgLSBkZWZpbmVzIG1hcHBpbmcgYmV0d2VlbiBjYW5vbmljYWwgYW5kIG5hdGl2ZSBsYW5ndWFnZQojICAgICAgICAgICAgIG5hbWVzIGFzIHBlciBJU08tNjM5LTEKIwojICRJZCQKIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciAgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlICB0aGUgTk9USUNFICBmaWxlIGRpc3RyaWJ1dGVkCiMgd2l0aCAgdGhpcyAgd29yayAgZm9yICBhZGRpdGlvbmFsIGluZm9ybWF0aW9uICByZWdhcmRpbmcgIGNvcHlyaWdodAojIG93bmVyc2hpcC4gICBUaGUgQVNGICBsaWNlbnNlcyB0aGlzICBmaWxlIHRvICB5b3UgdW5kZXIgIHRoZSBBcGFjaGUKIyBMaWNlbnNlLCBWZXJzaW9uICAyLjAgKHRoZSAgIkxpY2Vuc2UiKTsgeW91IG1heSAgbm90IHVzZSAgdGhpcyBmaWxlCiMgZXhjZXB0IGluICBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICAgWW91IG1heSBvYnRhaW4gIGEgY29weSBvZgojIHRoZSBMaWNlbnNlIGF0CiMKIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TICBPRiBBTlkgIEtJTkQsIGVpdGhlciAgZXhwcmVzcyBvcgojIGltcGxpZWQuICAgU2VlICB0aGUgTGljZW5zZSAgZm9yICB0aGUgIHNwZWNpZmljIGxhbmd1YWdlICBnb3Zlcm5pbmcKIyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKIyBDb3B5cmlnaHQgMjAwMS0yMDA4IFJvZ3VlIFdhdmUgU29mdHdhcmUsIEluYy4KIyAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmFhICAgIGFhciwgQWZhcgphYiAgICBhYmssIEFia2hhemlhbgphZSAgICBhdmUsIEF2ZXN0YW4KYWYgICAgYWZyLCBBZnJpa2FhbnMKYWsgICAgYWthLCBBa2FuCmFtICAgIGFtaCwgQW1oYXJpYwphbiAgICBhcmcsIEFyYWdvbmVzZQphciAgICBhcmEsIEFyYWJpYwphcyAgICBhc20sIEFzc2FtZXNlCmF2ICAgIGF2YSwgQXZhcmljCmF5ICAgIGF5bSwgQXltYXJhCmF6ICAgIGF6ZSwgQXplcmJhaWphbmkKYmEgICAgYmFrLCBCYXNoa2lyCmJlICAgIGJlbCwgQmVsYXJ1c2lhbgpiZyAgICBidWwsIEJ1bGdhcmlhbgpiaCAgICBiaWgsIEJpaGFyaQpiaSAgICBiaXMsIEJpc2xhbWEKYm0gICAgYmFtLCBCYW1iYXJhCmJuICAgIGJlbiwgQmVuZ2FsaQpibyAgICB0aWIsIGJvZCwgVGliZXRhbgpiciAgICBicmUsIEJyZXRvbgpicyAgICBib3MsIEJvc25pYW4KY2EgICAgY2F0LCBDYXRhbGFuLCBWYWxlbmNpYW4KY2UgICAgY2hlLCBDaGVjaGVuCmNoICAgIGNoYSwgQ2hhbW9ycm8KY28gICAgY29zLCBDb3JzaWNhbgpjciAgICBjcmUsIENyZWUKY3MgICAgY3plLCBjZXMsIEN6ZWNoCmN1ICAgIGNodSwgQ2h1cmNoIFNsYXZpYywgT2xkIFNsYXZvbmljLCBDaHVyY2ggU2xhdm9uaWMsIE9sZCBCdWxnYXJpYW4sIE9sZCBDaHVyY2ggU2xhdm9uaWMKY3YgICAgY2h2LCBDaHV2YXNoCmN5ICAgIHdlbCwgY3ltLCBXZWxzaApkYSAgICBkYW4sIERhbmlzaApkZSAgICBnZXIsIGRldSwgR2VybWFuCmR2ICAgIGRpdiwgRGl2ZWhpLCBEaGl2ZWhpLCBNYWxkaXZpYW4KZHogICAgZHpvLCBEem9uZ2toYQplZSAgICBld2UsIEV3ZQplbCAgICBncmUsIGVsbCwgR3JlZWsKZW4gICAgZW5nLCBFbmdsaXNoCmVvICAgIGVwbywgRXNwZXJhbnRvCmVzICAgIHNwYSwgU3BhbmlzaCwgQ2FzdGlsaWFuCmV0ICAgIGVzdCwgRXN0b25pYW4KZXUgICAgYmFxLCBldXMsIEJhc3F1ZQpmYSAgICBwZXIsIGZhcywgUGVyc2lhbgpmZiAgICBmdWwsIEZ1bGFoCmZpICAgIGZpbiwgRmlubmlzaApmaiAgICBmaWosIEZpamlhbgpmbyAgICBmYW8sIEZhcm9lc2UKZnIgICAgZnJlLCBmcmEsIEZyZW5jaApmeSAgICBmcnksIFdlc3Rlcm4gRnJpc2lhbgpnYSAgICBnbGUsIElyaXNoCmdkICAgIGdsYSwgR2FlbGljLCBTY290dGlzaCBHYWVsaWMKZ2wgICAgZ2xnLCBHYWxpY2lhbgpnbiAgICBncm4sIEd1YXJhbmkKZ3UgICAgZ3VqLCBHdWphcmF0aQpndiAgICBnbHYsIE1hbngKaGEgICAgaGF1LCBIYXVzYQpoZSAgICBoZWIsIEhlYnJldwpoaSAgICBoaW4sIEhpbmRpCmhvICAgIGhtbywgSGlyaSBNb3R1CmhyICAgIHNjciwgaHJ2LCBDcm9hdGlhbgpodCAgICBoYXQsIEhhaXRpYW4sIEhhaXRpYW4gQ3Jlb2xlCmh1ICAgIGh1biwgSHVuZ2FyaWFuCmh5ICAgIGFybSwgaHllLCBBcm1lbmlhbgpoeiAgICBoZXIsIEhlcmVybwppZCAgICBpbmQsIEluZG9uZXNpYW4KaWcgICAgaWJvLCBJZ2JvCmlpICAgIGlpaSwgU2ljaHVhbiBZaSwgTnVvc3UKaWsgICAgaXBrLCBJbnVwaWFxCmlvICAgIGlkbywgSWRvCmlzICAgIGljZSwgaXNsLCBJY2VsYW5kaWMKaXQgICAgaXRhLCBJdGFsaWFuCml1ICAgIGlrdSwgSW51a3RpdHV0CmphICAgIGpwbiwgSmFwYW5lc2UKanYgICAgamF2LCBKYXZhbmVzZQprYSAgICBnZW8sIGthdCwgR2VvcmdpYW4Ka2cgICAga29uLCBLb25nbwpraSAgICBraWssIEtpa3V5dSwgR2lrdXl1CmtqICAgIGt1YSwgS3VhbnlhbWEsIEt3YW55YW1hCmtrICAgIGtheiwgS2F6YWtoCmtsICAgIGthbCwgS2FsYWFsbGlzdXQsIEdyZWVubGFuZGljCmttICAgIGtobSwgQ2VudHJhbCBLaG1lcgprbiAgICBrYW4sIEthbm5hZGEKa28gICAga29yLCBLb3JlYW4Ka3IgICAga2F1LCBLYW51cmkKa3MgICAga2FzLCBLYXNobWlyaQprdSAgICBrdXIsIEt1cmRpc2gKa3YgICAga29tLCBLb21pCmt3ICAgIGNvciwgQ29ybmlzaApreSAgICBraXIsIEtpcmdoaXosIEt5cmd5egpsYSAgICBsYXQsIExhdGluCmxiICAgIGx0eiwgTHV4ZW1ib3VyZ2lzaCwgTGV0emVidXJnZXNjaApsZyAgICBsdWcsIEdhbmRhCmxpICAgIGxpbSwgTGltYnVyZ2FuLCBMaW1idXJnZXIsIExpbWJ1cmdpc2gKbG4gICAgbGluLCBMaW5nYWxhCmxvICAgIGxhbywgTGFvCmx0ICAgIGxpdCwgTGl0aHVhbmlhbgpsdSAgICBsdWIsIEx1YmEtS2F0YW5nYQpsdiAgICBsYXYsIExhdHZpYW4KbWcgICAgbWxnLCBNYWxhZ2FzeQptaCAgICBtYWgsIE1hcnNoYWxsZXNlCm1pICAgIG1hbywgbXJpLCBNYW9yaQptayAgICBtYWMsIG1rZCwgTWFjZWRvbmlhbiwgRllSTyBNYWNlZG9uaWFuCm1sICAgIG1hbCwgTWFsYXlhbGFtCm1uICAgIG1vbiwgTW9uZ29saWFuCm1vICAgIG1vbCwgTW9sZGF2aWFuCm1yICAgIG1hciwgTWFyYXRoaQptcyAgICBtYXksIG1zYSwgTWFsYXkKbXQgICAgbWx0LCBNYWx0ZXNlCm15ICAgIGJ1ciwgbXlhLCBCdXJtZXNlCm5hICAgIG5hdSwgTmF1cnUKbmIgICAgbm9iLCBOb3J3ZWdpYW4gQm9rbeVsCm5kICAgIG5kZSwgTm9ydGggTmRlYmVsZQpuZSAgICBuZXAsIE5lcGFsaQpuZyAgICBuZG8sIE5kb25nYQpubCAgICBkdXQsIG5sZCwgRHV0Y2gsIEZsZW1pc2gKbm4gICAgbm5vLCBOb3J3ZWdpYW4gTnlub3JzaywgTm9yd2VnaWFuLU55bm9yc2sKbm8gICAgbm9yLCBOb3J3ZWdpYW4KbnIgICAgbmJsLCBTb3V0aCBOZGViZWxlCm52ICAgIG5hdiwgTmF2YWpvLCBOYXZhaG8KbnYgICAgbmF2LCBOYXZham8sIE5hdmFobwpueSAgICBueWEsIENoaWNoZXdhLCBDaGV3YSwgTnlhbmphCm9jICAgIG9jaSwgT2NjaXRhbiwgUHJvdmVu52FsCm9qICAgIG9qaSwgT2ppYndhCm9tICAgIG9ybSwgT3JvbW8Kb3IgICAgb3JpLCBPcml5YQpvcyAgICBvc3MsIE9zc2V0aWFuLCBPc3NldGljCnBhICAgIHBhbiwgUGFuamFiaSwgUHVuamFiaQpwaSAgICBwbGksIFBhbGkKcGwgICAgcG9sLCBQb2xpc2gKcHMgICAgcHVzLCBQdXNodG8sIFBhc2h0bwpwdCAgICBwb3IsIFBvcnR1Z3Vlc2UKcXUgICAgcXVlLCBRdWVjaHVhCnJtICAgIHJvaCwgUm9tYW5zaApybiAgICBydW4sIFJ1bmRpCnJvICAgIHJ1bSwgcm9uLCBSb21hbmlhbgpydSAgICBydXMsIFJ1c3NpYW4KcncgICAga2luLCBLaW55YXJ3YW5kYQpzYSAgICBzYW4sIFNhbnNrcml0CnNjICAgIHNyZCwgU2FyZGluaWFuCnNkICAgIHNuZCwgU2luZGhpCnNlICAgIHNtZSwgTm9ydGhlcm4gU2FtaQpzZyAgICBzYWcsIFNhbmdvCnNpICAgIHNpbiwgU2luaGFsYSwgU2luaGFsZXNlCnNrICAgIHNsbywgc2xrLCBTbG92YWsKc2wgICAgc2x2LCBTbG92ZW5pYW4Kc20gICAgc21vLCBTYW1vYW4Kc24gICAgc25hLCBTaG9uYQpzbyAgICBzb20sIFNvbWFsaQpzcSAgICBhbGIsIHNxaSwgQWxiYW5pYW4Kc3IgICAgc2NjLCBzcnAsIFNlcmJpYW4Kc3MgICAgc3N3LCBTd2F0aQpzdCAgICBzb3QsIFNvdXRoZXJuIFNvdGhvCnN1ICAgIHN1biwgU3VuZGFuZXNlCnN2ICAgIHN3ZSwgU3dlZGlzaApzdyAgICBzd2EsIFN3YWhpbGkKdGEgICAgdGFtLCBUYW1pbAp0ZSAgICB0ZWwsIFRlbHVndQp0ZyAgICB0Z2ssIFRhamlrCnRoICAgIHRoYSwgVGhhaQp0aSAgICB0aXIsIFRpZ3JpbnlhCnRrICAgIHR1aywgVHVya21lbgp0bCAgICB0Z2wsIFRhZ2Fsb2cKdG4gICAgdHNuLCBUc3dhbmEKdG8gICAgdG9uLCBUb25nYQp0ciAgICB0dXIsIFR1cmtpc2gKdHMgICAgdHNvLCBUc29uZ2EKdHQgICAgdGF0LCBUYXRhcgp0dyAgICB0d2ksIFR3aQp0eSAgICB0YWgsIFRhaGl0aWFuCnVnICAgIHVpZywgVWlnaHVyLCBVeWdodXIKdWsgICAgdWtyLCBVa3JhaW5pYW4KdXIgICAgdXJkLCBVcmR1CnV6ICAgIHV6YiwgVXpiZWsKdmUgICAgdmVuLCBWZW5kYQp2aSAgICB2aWUsIFZpZXRuYW1lc2UKdm8gICAgdm9sLCBWb2xhcPxrCndhICAgIHdsbiwgV2FsbG9vbgp3byAgICB3b2wsIFdvbG9mCnhoICAgIHhobywgWGhvc2EKeWkgICAgeWlkLCBZaWRkaXNoCnlvICAgIHlvciwgWW9ydWJhCnphICAgIHpoYSwgWmh1YW5nLCBDaHVhbmcKemggICAgY2hpLCB6aG8sIENoaW5lc2UKenUgICAgenVsLCBadWx1CgoKIyB0aGlzIGlzIGp1c3Qgc28gd2UgaGF2ZSBhIG1hcHBpbmcuIGl0IGlzIG5vdCBhY2N1cmF0ZSB3aXRob3V0IGFuIElTTy02MzktMiBtYXBwaW5nCnN0ICAgIE5vcnRoZXJuIFNvdGhvCnNlICAgIFNhbWkgKEluYXJpKSwgU2FtaSAoTHVsZSksIFNhbWkgKE5vcnRoZXJuKSwgU2FtaSAoU2tvbHQpLCBTYW1pIChTb3V0aGVybikKc3IgICAgU2VyYmlhbiAoQ3lyaWxsaWMpLCBTZXJiaWFuIChMYXRpbikKdXogICAgVXpiZWsgKExhdGluKSwgVXpiZWsgKEN5cmlsbGljKQpheiAgICBBemVyaSAoTGF0aW4pLCBBemVyaSAoQ3lyaWxsaWMp