gASVCwABAAAAAACMDmRvY3V0aWxzLm5vZGVzlIwIZG9jdW1lbnSUk5QpgZR9lCiMCXJhd3NvdXJjZZSMAJSMCGNoaWxkcmVulF2UKGgAjAZ0YXJnZXSUk5QpgZR9lChoBWgGaAddlIwKYXR0cmlidXRlc5R9lCiMA2lkc5RdlIwvbW9kdWxlLWV0aGVyZXVtLmRhb19mb3JrLnZtLmluc3RydWN0aW9ucy5zeXN0ZW2UYYwHY2xhc3Nlc5RdlIwFbmFtZXOUXZSMCGR1cG5hbWVzlF2UjAhiYWNrcmVmc5RdlIwFaXNtb2SUiHWMB3RhZ25hbWWUaAmMBnNvdXJjZZSMcC9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vZGFvX2Zvcmsvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5yc3SUjARsaW5llEsBjAZwYXJlbnSUaAOMCV9kb2N1bWVudJRoA3VijA9zcGhpbnguYWRkbm9kZXOUjAVpbmRleJSTlCmBlH2UKGgFaAZoB12UaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwHZW50cmllc5RdlCiMBHBhaXKUjDBtb2R1bGU7IGV0aGVyZXVtLmRhb19mb3JrLnZtLmluc3RydWN0aW9ucy5zeXN0ZW2UaBJoBk50lGF1aBxoI2gdaB5oH0sCaCBoA2ghaAN1YmgAjAdzZWN0aW9ulJOUKYGUfZQoaAVoBmgHXZQoaACMBXRpdGxllJOUKYGUfZQoaAWMMkV0aGVyZXVtIFZpcnR1YWwgTWFjaGluZSAoRVZNKSBTeXN0ZW0gSW5zdHJ1Y3Rpb25zlGgHXZRoAIwEVGV4dJSTlIwyRXRoZXJldW0gVmlydHVhbCBNYWNoaW5lIChFVk0pIFN5c3RlbSBJbnN0cnVjdGlvbnOUhZSBlH2UKGgFaAZoIGg6aCFoA2gdjFwvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzLy50b3gvZG9jcy9zdGFnZTBfb3V0L2F1dG9hcGkvID0+IGRvYy9kaWZmc5RoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGg4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lGgXXZRoGV2UjAhpbnRlcm5hbJSIjAVyZWZpZJSML2V0aGVyZXVtLmRhb19mb3JrLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0uY3JlYXRllIwIcmVmdGl0bGWUjC9ldGhlcmV1bS5kYW9fZm9yay52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmNyZWF0ZZR1aBxobWgdTmgfTmggapoCAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHYyBL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9kb2MvYXV0b2FwaS9ldGhlcmV1bS9kYW9fZm9yay92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdDozNzo8YXV0b3N1bW1hcnk+lGgfSwFoIGqXAgAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGqVAgAAaB1OaB9OaCBqkgIAAHViapYCAAApgZR9lChoBWgGaAddlGhpKYGUfZQoaAWMK0NyZWF0ZXMgYSBuZXcgYWNjb3VudCB3aXRoIGFzc29jaWF0ZWQgY29kZS6UaAddlGg/jCtDcmVhdGVzIGEgbmV3IGFjY291bnQgd2l0aCBhc3NvY2lhdGVkIGNvZGUulIWUgZR9lChoBWgGaCBqzgIAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIEvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL2Rhb19mb3JrL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjM3OjxhdXRvc3VtbWFyeT6UaB9LAWggassCAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcapUCAABoHU5oH05oIGqSAgAAdWJlaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGqQAgAAaB1OaB9OaCBqjQIAAHViapECAAApgZR9lChoBWgGaAddlChqlgIAACmBlH2UKGgFaAZoB12UaGkpgZR9lChoBYxBOm9iajpgcmV0dXJuXyA8ZXRoZXJldW0uZGFvX2Zvcmsudm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5yZXR1cm5fPmCUaAddlGhuKYGUfZQoaAVoBmgHXZRqogIAACmBlH2UKGgFavECAABoB12UaD+MB3JldHVybl+UhZSBlH2UKGgFaAZoIGr2AgAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlChqrQIAAIwCcHmUjAZweS1vYmqUZWgVXZRoF12UaBldlHVoHGqhAgAAaB1OaB9OaCBq8wIAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMCGludGVybmFslIiMBXJlZmlklIwwZXRoZXJldW0uZGFvX2Zvcmsudm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5yZXR1cm5flIwIcmVmdGl0bGWUjDBldGhlcmV1bS5kYW9fZm9yay52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLnJldHVybl+UdWgcaG1oHU5oH05oIGrvAgAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB2MgS9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vZGFvX2Zvcmsvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5yc3Q6Mzc6PGF1dG9zdW1tYXJ5PpRoH0sBaCBq7AIAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxqlQIAAGgdTmgfTmggaukCAAB1YmqWAgAAKYGUfZQoaAVoBmgHXZRoaSmBlH2UKGgFjCZIYWx0cyBleGVjdXRpb24gcmV0dXJuaW5nIG91dHB1dCBkYXRhLpRoB12UaD+MJkhhbHRzIGV4ZWN1dGlvbiByZXR1cm5pbmcgb3V0cHV0IGRhdGEulIWUgZR9lChoBWgGaCBqIAMAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIEvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL2Rhb19mb3JrL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjM3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ZZSFlIGUfZQoaAVoBmggagAEAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UKGqtAgAAjAJweZSMBnB5LW9iapRlaBVdlGgXXZRoGV2UdWgcaqECAABoHU5oH05oIGr9AwAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwIaW50ZXJuYWyUiIwFcmVmaWSUjDFldGhlcmV1bS5kYW9fZm9yay52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmNhbGxjb2RllIwIcmVmdGl0bGWUjDFldGhlcmV1bS5kYW9fZm9yay52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmNhbGxjb2RllHVoHGhtaB1OaB9OaCBq+QMAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIEvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL2Rhb19mb3JrL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjM3OjxhdXRvc3VtbWFyeT6UaB9LAWggavYDAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcapUCAABoHU5oH05oIGrzAwAAdWJqlgIAACmBlH2UKGgFaAZoB12UaGkpgZR9lChoBYxBTWVzc2FnZS1jYWxsIGludG8gdGhpcyBhY2NvdW50IHdpdGggYWx0ZXJuYXRpdmUgYWNjb3VudOKAmXMgY29kZS6UaAddlGg/jEFNZXNzYWdlLWNhbGwgaW50byB0aGlzIGFjY291bnQgd2l0aCBhbHRlcm5hdGl2ZSBhY2NvdW504oCZcyBjb2RlLpSFlIGUfZQoaAVoBmggaioEAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHYyBL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9kb2MvYXV0b2FwaS9ldGhlcmV1bS9kYW9fZm9yay92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdDozNzo8YXV0b3N1bW1hcnk+lGgfSwFoIGonBAAAdWJhaA59lCho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YXMoZXZtLCBHQVNfQ1JFQVRFICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgIGNyZWF0ZV9tZXNzYWdlX2dhcyA9IGV2bS5nYXNfbGVmdAogICAgZXZtLmdhc19sZWZ0ID0gVTI1NigwKQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgc2VuZGVyX2FkZHJlc3MgPSBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgc2VuZGVyID0gZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgc2VuZGVyX2FkZHJlc3MpCgogICAgY29udHJhY3RfYWRkcmVzcyA9IGNvbXB1dGVfY29udHJhY3RfYWRkcmVzcygKICAgICAgICBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkubm9uY2UsCiAgICApCgogICAgaWYgKAogICAgICAgIHNlbmRlci5iYWxhbmNlIDwgZW5kb3dtZW50CiAgICAgICAgb3Igc2VuZGVyLm5vbmNlID09IFVpbnQoMioqNjQgLSAxKQogICAgICAgIG9yIGV2bS5tZXNzYWdlLmRlcHRoICsgMSA+IFNUQUNLX0RFUFRIX0xJTUlUCiAgICApOgogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIGV2bS5nYXNfbGVmdCArPSBjcmVhdGVfbWVzc2FnZV9nYXMKICAgIGVsaWYgYWNjb3VudF9oYXNfY29kZV9vcl9ub25jZShldm0uZW52LnN0YXRlLCBjb250cmFjdF9hZGRyZXNzKToKICAgICAgICBpbmNyZW1lbnRfbm9uY2UoZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICBlbHNlOgogICAgICAgIGNhbGxfZGF0YSA9IG1lbW9yeV9yZWFkX2J5dGVzKAogICAgICAgICAgICBldm0ubWVtb3J5LCBtZW1vcnlfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9zaXplCiAgICAgICAgKQoKICAgICAgICBpbmNyZW1lbnRfbm9uY2UoZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpCgogICAgICAgIGNoaWxkX21lc3NhZ2UgPSBNZXNzYWdlKAogICAgICAgICAgICBjYWxsZXI9ZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgICAgIHRhcmdldD1CeXRlczAoKSwKICAgICAgICAgICAgZ2FzPWNyZWF0ZV9tZXNzYWdlX2dhcywKICAgICAgICAgICAgdmFsdWU9ZW5kb3dtZW50LAogICAgICAgICAgICBkYXRhPWIiIiwKICAgICAgICAgICAgY29kZT1jYWxsX2RhdGEsCiAgICAgICAgICAgIGN1cnJlbnRfdGFyZ2V0PWNvbnRyYWN0X2FkZHJlc3MsCiAgICAgICAgICAgIGRlcHRoPWV2bS5tZXNzYWdlLmRlcHRoICsgMSwKICAgICAgICAgICAgY29kZV9hZGRyZXNzPU5vbmUsCiAgICAgICAgICAgIHNob3VsZF90cmFuc2Zlcl92YWx1ZT1UcnVlLAogICAgICAgICkKICAgICAgICBjaGlsZF9ldm0gPSBwcm9jZXNzX2NyZWF0ZV9tZXNzYWdlKGNoaWxkX21lc3NhZ2UsIGV2bS5lbnYpCiAgICAgICAgZXZtLmNoaWxkcmVuLmFwcGVuZChjaGlsZF9ldm0pCiAgICAgICAgaWYgY2hpbGRfZXZtLmhhc19lcnJlZDoKICAgICAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZXZtLmxvZ3MgKz0gY2hpbGRfZXZtLmxvZ3MKICAgICAgICAgICAgcHVzaCgKICAgICAgICAgICAgICAgIGV2bS5zdGFjaywgVTI1Ni5mcm9tX2JlX2J5dGVzKGNoaWxkX2V2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KQogICAgICAgICAgICApCiAgICAgICAgZXZtLmdhc19sZWZ0ID0gY2hpbGRfZXZtLmdhc19sZWZ0CiAgICAgICAgY2hpbGRfZXZtLmdhc19sZWZ0ID0gVTI1NigwKQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBldm0ucGMgKz0gMQqUaAddlChoP1gKAgAAZGVmIGNyZWF0ZShldm06IEV2bSkgLT4gTm9uZToKICAgICMgVGhpcyBpbXBvcnQgY2F1c2VzIGEgY2lyY3VsYXIgaW1wb3J0IGVycm9yCiAgICAjIGlmIGl0J3Mgbm90IG1vdmVkIGluc2lkZSB0aGlzIG1ldGhvZAogICAgZnJvbSAuLi52bS5pbnRlcnByZXRlciBpbXBvcnQgU1RBQ0tfREVQVEhfTElNSVQsIHByb2Nlc3NfY3JlYXRlX21lc3NhZ2UKCiAgICAjIFNUQUNLCiAgICBlbmRvd21lbnQgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9zaXplID0gcG9wKGV2bS5zdGFjaykKCiAgICAjIEdBUwogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LCBbKG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUpXQogICAgKQoKICAgIGNoYXJnZV9nYXMoZXZtLCBHQVNfQ1JFQVRFICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgIGNyZWF0ZV9tZXNzYWdlX2dhcyA9lIWUgZR9lChoBWgGaCBqEAYAAGghaANoHWhEaB9LAHViamsFAAApgZR9lChoBWgGaAddlGg/jCkgbWF4X21lc3NhZ2VfY2FsbF9nYXMoVWludChldm0uZ2FzX2xlZnQpKZSFlIGUfZQoaAVoBmggahgGAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UjAxjaGFuZ2UtYWRkZWSUYWgVXZRoF12UaBldlHVoHGpqBQAAaCBqEAYAAGghaANoHWhEaB9LAHViaD+MEiBldm0uZ2FzX2xlZnQKICAgIJSFlIGUfZQoaAVoBmggahAGAABoIWgDaB1oRGgfSwB1YmprBQAAKYGUfZQoaAVoBmgHXZRoP1goAgAALT0gVTI1NihjcmVh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dXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBpbmNvcnBvcmF0ZV9jaGlsZF9vbl9zdWNjZXNzKGV2bSwgY2hpbGRfZXZtKQogICAgICAgICAgICBwdXNoKAogICAgICAgICAgICAgICAgZXZtLnN0YWNrLCBVMjU2LmZyb21fYmVfYnl0ZXMoY2hpbGRfZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpCiAgICAgICAgICAgICkKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgZXZtLnBjICs9lIWUgZR9lChoBWgGaCBq3AYAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZSMEmNoYW5nZS1yZXBsYWNlbWVudJRhaBVdlGgXXZRoGV2UdWgcamoFAABoIGoQBgAAaCFoA2gdaERoH0sAdWJoP4wDIDEglIWUgZR9lChoBWgGaCBqEAYAAGghaANoHWhEaB9LAHViamsFAAApgZR9lChoBWgGaAddlGg/WBwFAAA+IFNUQUNLX0RFUFRIX0xJTUlUCiAgICApOgogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIGV2bS5nYXNfbGVmdCArPSBjcmVhdGVfbWVzc2FnZV9nYXMKICAgIGVsaWYgYWNjb3VudF9oYXNfY29kZV9vcl9ub25jZShldm0uZW52LnN0YXRlLCBjb250cmFjdF9hZGRyZXNzKToKICAgICAgICBpbmNyZW1lbnRfbm9uY2UoZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICBlbHNlOgogICAgICAgIGNhbGxfZGF0YSA9IG1lbW9yeV9yZWFkX2J5dGVzKAogICAgICAgICAgICBldm0ubWVtb3J5LCBtZW1vcnlfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9zaXplCiAgICAgICAgKQoKICAgICAgICBpbmNyZW1lbnRfbm9uY2UoZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpCgogICAgICAgIGNoaWxkX21lc3NhZ2UgPSBNZXNzYWdlKAogICAgICAgICAgICBjYWxsZXI9ZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgICAgIHRhcmdldD1CeXRlczAoKSwKICAgICAgICAgICAgZ2FzPWNyZWF0ZV9tZXNzYWdlX2dhcywKICAgICAgICAgICAgdmFsdWU9ZW5kb3dtZW50LAogICAgICAgICAgICBkYXRhPWIiIiwKICAgICAgICAgICAgY29kZT1jYWxsX2RhdGEsCiAgICAgICAgICAgIGN1cnJlbnRfdGFyZ2V0PWNvbnRyYWN0X2FkZHJlc3MsCiAgICAgICAgICAgIGRlcHRoPWV2bS5tZXNzYWdlLmRlcHRoICsgMSwKICAgICAgICAgICAgY29kZV9hZGRyZXNzPU5vbmUsCiAgICAgICAgICAgIHNob3VsZF90cmFuc2Zlcl92YWx1ZT1UcnVlLAogICAgICAgICkKICAgICAgICBjaGlsZF9ldm0gPSBwcm9jZXNzX2NyZWF0ZV9tZXNzYWdlKGNoaWxkX21lc3NhZ2UsIGV2bS5lbnYpCiAgICAgICAgZXZtLmNoaWxkcmVuLmFwcGVuZChjaGlsZF9ldm0pCiAgICAgICAgaWYgY2hpbGRfZXZtLmhhc19lcnJlZDoKICAgICAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZXZtLmxvZ3MgKz0gY2hpbGRfZXZtLmxvZ3MKICAgICAgICAgICAgcHVzaCgKICAgICAgICAgICAgICAgIGV2bS5zdGFjaywgVTI1Ni5mcm9tX2JlX2J5dGVzKGNoaWxkX2V2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KQogICAgICAgICAgICApCiAgICAgICAgZXZtLmdhc19sZWZ0ID0gY2hpbGRfZXZtLmdhc19sZWZ0CiAgICAgICAgY2hpbGRfZXZtLmdhc19sZWZ0ID0gVTI1NigwKQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBldm0ucGMgKz0gMQqUhZSBlH2UKGgFaAZoIGruBgAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlIwOY2hhbmdlLXJlbW92ZWSUYWgVXZRoF12U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b3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgZXZtLm91dHB1dCA9IG1lbW9yeV9yZWFkX2J5dGVzKAogICAgICAgIGV2bS5tZW1vcnksIG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUKICAgICkKCiAgICBldm0ucnVubmluZyA9IEZhbHNlCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIHBhc3MKlGgHXZRoP1gHAgAAZGVmIHJldHVybl8oZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBtZW1vcnlfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksIFsobWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZSldCiAgICApCgogICAgY2hhcmdlX2dhcyhldm0sIEdBU19aRVJPICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgZXZtLm91dHB1dCA9IG1lbW9yeV9yZWFkX2J5dGVzKAogICAgICAgIGV2bS5tZW1vcnksIG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUKICAgICkKCiAgICBldm0ucnVubmluZyA9IEZhbHNlCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIHBhc3MKlIWUgZR9lChoBWgGaCBq7QcAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMBnNvdXJjZZSMYS9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3Mvc3JjL2V0aGVyZXVtL2Rhb19mb3Jr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LAogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbjogVTI1NiwKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZTogVTI1NiwKKSAtPiBOb25lOgogICAgZnJvbSAuLi52bS5pbnRlcnByZXRlciBpbXBvcnQgU1RBQ0tfREVQVEhfTElNSVQsIHByb2Nlc3NfbWVzc2FnZQoKICAgIGlmIGV2bS5tZXNzYWdlLmRlcHRoICsgMSA+IFNUQUNLX0RFUFRIX0xJTUlUOgogICAgICAgIGV2bS5nYXNfbGVmdCArPSBnYXMKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgICAgICByZXR1cm4KCiAgICBjYWxsX2RhdGEgPSBtZW1vcnlfcmVhZF9ieXRlcygKICAgICAgICBldm0ubWVtb3J5LCBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplCiAgICApCiAgICBjb2RlID0gZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgY29kZV9hZGRyZXNzKS5jb2RlCiAgICBjaGlsZF9tZXNzYWdlID0gTWVzc2FnZSgKICAgICAgICBjYWxsZXI9Y2FsbGVyLAogICAgICAgIHRhcmdldD10bywKICAgICAgICBnYXM9VTI1NihnYXMpLAogICAgICAgIHZhbHVlPXZhbHVlLAogICAgICAgIGRhdGE9Y2FsbF9kYXRhLAogICAgICAgIGNvZGU9Y29kZSwKICAgICAgICBjdXJyZW50X3RhcmdldD10bywKICAgICAgICBkZXB0aD1ldm0ubWVzc2FnZS5kZXB0aCArIDEsCiAgICAgICAgY29kZV9hZGRyZXNzPWNvZGVfYWRkcmVzcywKICAgICAgICBzaG91bGRfdHJhbnNmZXJfdmFsdWU9c2hvdWxkX3RyYW5zZmVyX3ZhbHVlLAogICAgKQogICAgY2hpbGRfZXZtID0gcHJvY2Vzc19tZXNzYWdlKGNoaWxkX21lc3NhZ2UsIGV2bS5lbnYpCiAgICBldm0uY2hpbGRyZW4uYXBwZW5kKGNoaWxkX2V2bSkKCiAgICBpZiBjaGlsZF9ldm0uaGFzX2VycmVkOgogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgZWxzZToKICAgICAgICBldm0ubG9ncyArPSBjaGlsZF9ldm0ubG9ncwogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDEpKQoKICAgIGFjdHVhbF9vdXRwdXRfc2l6ZSA9IG1pbihtZW1vcnlfb3V0cHV0X3NpemUsIFUyNTYobGVuKGNoaWxkX2V2bS5vdXRwdXQpKSkKICAgIG1lbW9yeV93cml0ZSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgY2hpbGRfZXZtLm91dHB1dFs6YWN0dWFsX291dHB1dF9zaXplXSwKICAgICkKICAgIGV2bS5nYXNfbGVmdCArPSBjaGlsZF9ldm0uZ2FzX2xlZnQKICAgIGNoaWxkX2V2bS5nYXNfbGVmdCA9IFUyNTYoMCkKlGgHXZQoaD9YGQQAAGRlZiBnZW5lcmljX2NhbGwoCiAgICBldm06IEV2bSwKICAgIGdhczogVWludCwKICAgIHZhbHVlOiBVMjU2LAogICAgY2FsbGVyOiBBZGRyZXNzLAogICAgdG86IEFkZHJlc3MsCiAgICBjb2RlX2FkZHJlc3M6IEFkZHJlc3MsCiAgICBzaG91bGRfdHJhbnNmZXJfdmFsdWU6IGJvb2wsCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb246IFUyNTYsCiAgICBtZW1vcnlfaW5wdXRfc2l6ZTogVTI1NiwKICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb246IFUyNTYsCiAgICBtZW1vcnlfb3V0cHV0X3NpemU6IFUyNTYsCikgLT4gTm9uZToKICAgIGZyb20gLi4udm0uaW50ZXJwcmV0ZXIgaW1wb3J0IFNUQUNLX0RFUFRIX0xJTUlULCBwcm9jZXNzX21lc3NhZ2UKCiAgICBpZiBldm0ubWVzc2FnZS5kZXB0aCArIDEgPiBTVEFDS19ERVBUSF9MSU1JVDoKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gZ2FzCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgcmV0dXJuCgogICAgY2Fs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ICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAgWwogICAgICAgICAgICAobWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZSksCiAgICAgICAgICAgIChtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfb3V0cHV0X3NpemUpLAogICAgICAgIF0sCiAgICApCiAgICBtZXNzYWdlX2NhbGxfZ2FzID0gY2FsY3VsYXRlX21lc3NhZ2VfY2FsbF9nYXMoCiAgICAgICAgZXZtLmVudi5zdGF0ZSwgZ2FzLCB0bywgdmFsdWUKICAgICkKICAgIGNoYXJnZV9nYXMoZXZtLCBtZXNzYWdlX2NhbGxfZ2FzLmNvc3QgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBzZW5kZXJfYmFsYW5jZSA9IGdldF9hY2NvdW50KAogICAgICAgIGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CiAgICApLmJhbGFuY2UKICAgIGlmIHNlbmRlcl9iYWxhbmNlIDwgdmFsdWU6CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgZXZtLmdhc19sZWZ0ICs9IG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZAogICAgZWxzZToKICAgICAgICBnZW5lcmljX2NhbGwoCiAgICAgICAgICAgIGV2bSwKICAgICAgICAgICAgbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kLAogICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgICAgIHRvLAogICAgICAgICAgICB0bywKICAgICAgICAgICAgVHJ1ZSwKICAgICAgICAgICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgICAgICBtZW1vcnlfaW5wdXRfc2l6ZSwKICAgICAgICAgICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICAgICAgbWVtb3J5X291dHB1dF9zaXplLAogICAgICAgICkKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgZXZtLnBjICs9IDEKlGgHXZQoaD9YJQIAAGRlZiBjYWxsKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgZ2FzID0gVWludChwb3AoZXZtLnN0YWNrKSkKICAgIHRvID0gdG9fYWRkcmVzcyhwb3AoZXZtLnN0YWNrKSkKICAgIHZhbHVlID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwKICAgICAgICBbCiAgICAgICAgICAgIChtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplKSwKICAgICAgICAgICAgKG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9vdXRwdXRfc2l6ZSksCiAgICAgICAgXSwKICAgICkKICAgIJSFlIGUfZQoaAVoBmggaswKAABoIWgDaB1oRGgfSwB1YmprBQAAKYGUfZQoaAVoBmgHXZRoP4zAX2FjY291bnRfZXhpc3RzID0gYWNjb3VudF9leGlzdHMoZXZtLmVudi5zdGF0ZSwgdG8pCiAgICBjcmVhdGVfZ2FzX2Nvc3QgPSBVaW50KDApIGlmIF9hY2NvdW50X2V4aXN0cyBlbHNlIEdBU19ORVdfQUNDT1VOVAogICAgdHJhbnNmZXJfZ2FzX2Nvc3QgPSBVaW50KDApIGlmIHZhbHVlID09IDAgZWxzZSBHQVNfQ0FM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bpRq6wsAAIwHb2JqdHlwZZRqVAwAAIwIZGVzY3R5cGWUalQMAACMB25vaW5kZXiUiXVoHGo+BQAAaB1oRGgfSwBoIGqSCwAAaCFoA3Viag8GAAApgZR9lChoBVicBQAAZGVmIGNhbGxjb2RlKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgZ2FzID0gVWludChwb3AoZXZtLnN0YWNrKSkKICAgIGNvZGVfYWRkcmVzcyA9IHRvX2FkZHJlc3MocG9wKGV2bS5zdGFjaykpCiAgICB2YWx1ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICB0byA9IGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CgogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQogICAgbWVzc2FnZV9jYWxsX2dhcyA9IGNhbGN1bGF0ZV9tZXNzYWdlX2NhbGxfZ2FzKAogICAgICAgIGV2bS5lbnYuc3RhdGUsIGdhcywgdG8sIHZhbHVlCiAgICApCiAgICBjaGFyZ2VfZ2FzKGV2bSwgbWVzc2FnZV9jYWxsX2dhcy5jb3N0ICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgc2VuZGVyX2JhbGFuY2UgPSBnZXRfYWNjb3VudCgKICAgICAgICBldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgKS5iYWxhbmNlCiAgICBpZiBzZW5kZXJfYmFsYW5jZSA8IHZhbHVlOgogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIGV2bS5nYXNfbGVmdCArPSBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQKICAgIGVsc2U6CiAgICAgICAgZ2VuZXJpY19jYWxsKAogICAgICAgICAgICBldm0sCiAgICAgICAgICAgIG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZCwKICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgICAgICB0bywKICAgICAgICAgICAgY29kZV9hZGRyZXNzLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgICAgIG1lbW9yeV9pbnB1dF9zaXplLAogICAgICAgICAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgICAgICBtZW1vcnlfb3V0cHV0X3NpemUsCiAgICAgICAgKQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBldm0ucGMgKz0gMQqUaAddlChoP1hYAgAAZGVmIGNhbGxjb2RlKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgZ2FzID0gVWludChwb3AoZXZtLnN0YWNrKSkKICAgIGNvZGVfYWRkcmVzcyA9IHRvX2FkZHJlc3MocG9wKGV2bS5zdGFjaykpCiAgICB2YWx1ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICB0byA9IGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CgogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQogICAglIWUgZR9lChoBWgGaCBqXAwAAGghaANoHWhEaB9LAHViamsFAAApgZR9lChoBWgGaAddlGg/jEJ0cmFuc2Zlcl9nYXNfY29zdCA9IFVpbnQoMCkgaWYgdmFsdWUgPT0gMCBlbHNlIEdBU19DQUxMX1ZBTFVFCiAgICCUhZSBlH2UKGgFaAZoIGpkDAAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlIwMY2hhbmdlLWFkZGVklGFoFV2UaBddlGgZXZR1aBxqagUAAGggalwMAABoIWgDaB1oRGgfSwB1Ymg/jDdtZXNzYWdlX2NhbGxfZ2FzID0gY2FsY3VsYXRlX21lc3NhZ2VfY2FsbF9nYXMoCiAgICAgICAglIWUgZR9lChoBWgGaCBqXAwAAGghaANoHWhEaB9LAHViamsFAAApgZR9lChoBWgGaAddlGg/WCcBAAB2YWx1ZSwKICAgICAgICBnYXMsCiAgICAgICAgVWludChldm0uZ2FzX2xlZnQpLAogICAgICAgIGV4dGVuZF9tZW1vcnkuY29zdCwKICAgICAgICBHQVNfQ0FMTCArIHRyYW5zZmVyX2dhc19jb3N0LAogICAgKQogICAgY2hhcmdlX2dhcyhldm0sIG1lc3NhZ2VfY2FsbF9nYXMuY29zdCArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1l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ZXIgdG8gYmVuZWZpY2lhcnkKICAgIHNldF9hY2NvdW50X2JhbGFuY2UoCiAgICAgICAgZXZtLmVudi5zdGF0ZSwgYmVuZWZpY2lhcnksIGJlbmVmaWNpYXJ5X2JhbGFuY2UgKyBvcmlnaW5hdG9yX2JhbGFuY2UKICAgICkKICAgICMgTmV4dCwgWmVybyB0aGUgYmFsYW5jZSBvZiB0aGUgYWRkcmVzcyBiZWluZyBkZWxldGVkIChtdXN0IGNvbWUgYWZ0ZXIKICAgICMgc2VuZGluZyB0byBiZW5lZmljaWFyeSBpbiBjYXNlIHRoZSBjb250cmFjdCBuYW1lZCBpdHNlbGYgYXMgdGhlCiAgICAjIGJlbmVmaWNpYXJ5KS4KICAgIHNldF9hY2NvdW50X2JhbGFuY2UoZXZtLmVudi5zdGF0ZSwgb3JpZ2luYXRvciwgVTI1NigwKSkKCiAgICAjIHJlZ2lzdGVyIGFjY291bnQgZm9yIGRlbGV0aW9uCiAgICBldm0uYWNjb3VudHNfdG9fZGVsZXRlLmFkZChvcmlnaW5hdG9yKQoKICAgICMgSEFMVCB0aGUgZXhlY3V0aW9uCiAgICBldm0ucnVubmluZyA9IEZhbHNlCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIHBhc3MKlGgHXZQoaD+MbGRlZiBzZWxmZGVzdHJ1Y3QoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBiZW5lZmljaWFyeSA9IHRvX2FkZHJlc3MocG9wKGV2bS5zdGFjaykpCgogICAgIyBHQVMKICAgIJSFlIGUfZQoaAVoBmggauwNAABoIWgDaB1oRGgfSwB1YmprBQAAKYGUfZQoaAVoBmgHXZRoP1iNAwAAaWYgYWNjb3VudF9leGlzdHMoZXZtLmVudi5zdGF0ZSwgYmVuZWZpY2lhcnkpOgogICAgICAgIGNoYXJnZV9nYXMoZXZtLCBHQVNfU0VMRl9ERVNUUlVDVCkKICAgIGVsc2U6CiAgICAgICAgY2hhcmdlX2dhcyhldm0sIEdBU19TRUxGX0RFU1RSVUNUICsgR0FTX1NFTEZfREVTVFJVQ1RfTkVXX0FDQ09VTlQpCgogICAgIyBPUEVSQVRJT04KICAgIG9yaWdpbmF0b3IgPSBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgYmVuZWZpY2lhcnlfYmFsYW5jZSA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGJlbmVmaWNpYXJ5KS5iYWxhbmNlCiAgICBvcmlnaW5hdG9yX2JhbGFuY2UgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBvcmlnaW5hdG9yKS5iYWxhbmNlCgogICAgIyBGaXJzdCBUcmFuc2ZlciB0byBiZW5lZmljaWFyeQogICAgc2V0X2FjY291bnRfYmFsYW5jZSgKICAgICAgICBldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSwgYmVuZWZpY2lhcnlfYmFsYW5jZSArIG9yaWdpbmF0b3JfYmFsYW5jZQogICAgKQogICAgIyBOZXh0LCBaZXJvIHRoZSBiYWxhbmNlIG9mIHRoZSBhZGRyZXNzIGJlaW5nIGRlbGV0ZWQgKG11c3QgY29tZSBhZnRlcgogICAgIyBzZW5kaW5nIHRvIGJlbmVmaWNpYXJ5IGluIGNhc2UgdGhlIGNvbnRyYWN0IG5hbWVkIGl0c2VsZiBhcyB0aGUKICAgICMgYmVuZWZpY2lhcnkpLgogICAgc2V0X2FjY291bnRfYmFsYW5jZShldm0uZW52LnN0YXRlLCBvcmlnaW5hdG9yLCBVMjU2KDApKQoKICAgICMgcmVnaXN0ZXIgYWNjb3VudCBmb3IgZGVsZXRpb24KICAgIGV2bS5hY2NvdW50c190b19kZWxldGUuYWRkKG9yaWdpbmF0b3IpCgogICAgIyBIQUxUIHRoZSBleGVjdXRpb24KICAgIGV2bS5ydW5uaW5nID0gRmFsc2UKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAglIWUgZR9lChoBWgGaCBq9A0AAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZSMDGNoYW5nZS1hZGRlZJRhaBVdlGgXXZRoGV2UdWgcamoFAABoIGrsDQAAaCFoA2gdaERoH0sAdWJoP4wKcGFzcwoKICAgIJSFlIGUfZQoaAVoBmggauwNAABoIWgDaB1oRGgfSwB1YmprBQAAKYGUfZQoaAVoBmgHXZRoP1jeAgAAIyBPUEVSQVRJT04KICAgIG9yaWdpbmF0b3IgPSBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgYmVuZWZpY2lhcnlfYmFsYW5jZSA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGJlbmVmaWNpYXJ5KS5iYWxhbmNlCiAgICBvcmlnaW5hdG9yX2JhbGFuY2UgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBvcmlnaW5hdG9yKS5iYWxhbmNlCgogICAgIyBGaXJzdCBUcmFuc2ZlciB0byBiZW5lZmljaWFyeQogICAgc2V0X2FjY291bnRfYmFsYW5jZSgKICAgICAgICBldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSwgYmVuZWZpY2lhcnlfYmFsYW5jZSArIG9yaWdpbmF0b3JfYmFsYW5jZQogICAgKQogICAgIyBOZXh0LCBaZXJvIHRoZSBiYWxhbmNlIG9mIHRoZSBhZGRyZXNzIGJlaW5nIGRlbGV0ZWQgKG11c3QgY29tZSBhZnRlcgogICAgIyBzZW5kaW5nIHRvIGJlbmVmaWNpYXJ5IGluIGNhc2UgdGhlIGNvbnRyYWN0IG5hbWVkIGl0c2VsZiBhcyB0aGUKICAgICMgYmVuZWZpY2lhcnkpLgogICAgc2V0X2FjY291bnRfYmFsYW5jZShldm0uZW52LnN0YXRlLCBvcmlnaW5hdG9yLCBVMjU2KDApKQoKICAgICMgcmVnaXN0ZXIgYWNjb3VudCBmb3IgZGVsZXRpb24KICAgIGV2bS5hY2NvdW50c190b19kZWxldGUuYWRkKG9yaWdpbmF0b3IpCgogICAgIyBIQUxUIHRoZSBleGVjdXRpb24KICAgIGV2bS5ydW5uaW5nID0gRmFsc2UKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgcGFzcwqUhZSBlH2UKGgFaAZoIGoGDgAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlIwOY2hhbmdlLXJlbW92ZWSUYWgVXZRoF12UaBldlHVoHGpqBQAAaCBq7A0AAGghaANoHWhEaB9LAHViaD9oBoWUgZR9lChoBWgGaCBq7A0AAGghaANoHWhEaB9LAHViZWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMBnNvdXJjZZSMYS9ob21lL3J1bm5l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X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfb3V0cHV0X3NpemUpLAogICAgICAgIF0sCiAgICApCiAgICBjaGFyZ2VfZ2FzKGV2bSwgR0FTX0NBTEwgKyBnYXMgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBnZW5lcmljX2NhbGwoCiAgICAgICAgZXZtLAogICAgICAgIGdhcywKICAgICAgICBldm0ubWVzc2FnZS52YWx1ZSwKICAgICAgICBldm0ubWVzc2FnZS5jYWxsZXIsCiAgICAgICAgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgY29kZV9hZGRyZXNzLAogICAgICAgIEZhbHNlLAogICAgICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICBtZW1vcnlfaW5wdXRfc2l6ZSwKICAgICAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSwKICAgICkKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgZXZtLnBjICs9IDEKlGgHXZQoaD9YHAIAAGRlZiBkZWxlZ2F0ZWNhbGwoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBnYXMgPSBVaW50KHBvcChldm0uc3RhY2spKQogICAgY29kZV9hZGRyZXNzID0gdG9fYWRkcmVzcyhwb3AoZXZtLnN0YWNrKSkKICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1v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aBNdlGgVXZRoF12UaBldlIwGc291cmNllIxhL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9zcmMvZXRoZXJldW0vZGFvX2Zvcmsvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS5weZSMCXhtbDpzcGFjZZRqLAIAAIwFZm9yY2WUiYwIbGFuZ3VhZ2WUjAZweXRob26UjA5oaWdobGlnaHRfYXJnc5R9lGoNBwAASwFzjAdsaW5lbm9zlIl1aBxqDgYAAGgdaB5oH0uhaCBqLQ4AAGghaAN1YmVoDn2UKGgQXZRq2AEAAGFoE12UaBVdlIwMZGVsZWdhdGVjYWxslGFoF12UaBldlHVoHGgzaB1oHmgfS5RoIGoRBQAAaCFoA3ViZWgOfZQoaBBdlGjtYWgTXZRoFV2UjA5tb2R1bGUgZGV0YWlsc5RhaBddlGgZXZR1aBxoM2gdaB5oH0snaCBoNWghaAN1YmVoDn2UKGgQXZSMMGV0aGVyZXVtLXZpcnR1YWwtbWFjaGluZS1ldm0tc3lzdGVtLWluc3RydWN0aW9uc5RhaBNdlGgVXZSMMmV0aGVyZXVtIHZpcnR1YWwgbWFjaGluZSAoZXZtKSBzeXN0ZW0gaW5zdHJ1Y3Rpb25zlGFoF12UaBldlHVoHGgzaB1oHmgfSwRoIGgDaCFoA3ViZWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMBnNvdXJjZZRoRHVoHGgBjA5jdXJyZW50X3NvdXJjZZRoRIwMY3VycmVudF9saW5llEsAjAhzZXR0aW5nc5SMEWRvY3V0aWxzLmZyb250ZW5klIwGVmFsdWVzlJOUKYGUfZQojAxyZXBvcnRfbGV2ZWyUSwKMCmhhbHRfbGV2ZWyUSwSMEWV4aXRfc3RhdHVzX2xldmVslEsFjAVkZWJ1Z5ROjA53YXJuaW5nX3N0cmVhbZROjAl0cmFjZWJhY2uUTowPb3V0cHV0X2VuY29kaW5nlIwFdXRmLTiUjB1vdXRwdXRfZW5jb2RpbmdfZXJyb3JfaGFuZGxlcpSMEXhtbGNoYXJyZWZyZXBsYWNllIwOZXJyb3JfZW5jb2RpbmeUjAV1dGYtOJSMHGVycm9yX2VuY29kaW5nX2Vycm9yX2hhbmRsZXKUjBBiYWNrc2xhc2hyZXBsYWNllIwTcmVjb3JkX2RlcGVuZGVuY2llc5SMDmRvY3V0aWxzLnV0aWxzlIwORGVwZW5kZW5jeUxpc3SUk5QpgZR9lCiMBGxpc3SUXZSMBGZpbGWUTnVijAZjb25maWeUTowNZHVtcF9zZXR0aW5nc5ROjA5kdW1wX2ludGVybmFsc5ROjA9kdW1wX3RyYW5zZm9ybXOUTowPZHVtcF9wc2V1ZG9feG1slE6MEGV4cG9zZV9pbnRlcm5hbHOUTowOc3RyaWN0X3Zpc2l0b3KUTowPX2Rpc2FibGVfY29uZmlnlE6MB19zb3VyY2WUTowMX2Rlc3RpbmF0aW9ulIxKZG9jL2RpZmZzL2Rhb19mb3JrX3RhbmdlcmluZV93aGlzdGxlL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucGlja2xlNjSUjA1fY29uZmlnX2ZpbGVzlF2UjBFsaW5lX2xlbmd0aF9saW1pdJRNECeMCXRhYl93aWR0aJRLCIwQc3ludGF4X2hpZ2hsaWdodJSMBGxvbmeUjAxzbWFydF9xdW90ZXOUiYwTc21hcnRxdW90ZXNfbG9jYWxlc5ROjB1jaGFyYWN0ZXJfbGV2ZWxfaW5saW5lX21hcmt1cJSJjAZ3cml0ZXKUjAN4bWyUjBljb21wYXJlX3NlY3Rpb25zX2J5X25hbWVzlEsBjAxkdW1wX3JzdGRpZmaUTowFX2JvdGiUfZQoaDhOjAlnZW5lcmF0b3KUTowJZGF0ZXN0YW1wlE6MC3NvdXJjZV9saW5rlE6MCnNvdXJjZV91cmyUTowNdG9jX2JhY2tsaW5rc5RqlQIAAIwSZm9vdG5vdGVfYmFja2xpbmtzlEsBjA1zZWN0bnVtX3hmb3JtlEsBjA5kb2N0aXRsZV94Zm9ybZRLAYwNZG9jaW5mb194Zm9ybZRLAYwSc2VjdHN1YnRpdGxlX3hmb3JtlEsAjA5zdHJpcF9jb21tZW50c5ROjA5pbnB1dF9lbmNvZGluZ5ROjBxpbnB1dF9lbmNvZGluZ19lcnJvcl9oYW5kbGVylIwGc3RyaWN0lIwNbGFuZ3VhZ2VfY29kZZSMAmVulIwOcGVwX3JlZmVyZW5jZXOUTowMcGVwX2Jhc2VfdXJslIwfaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL5SMFXBlcF9maWxlX3VybF90ZW1wbGF0ZZSMCHBlcC0lMDRklIwOcmZjX3JlZmVyZW5jZXOUTowMcmZjX2Jhc2VfdXJslIwbaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvlIwddHJpbV9mb290bm90ZV9yZWZlcmVuY2Vfc3BhY2WUTowWZmlsZV9pbnNlcnRpb25fZW5hYmxlZJRLAYwLcmF3X2VuYWJsZWSUSwGMDmF1dG9faWRfcHJlZml4lIwCaWSUjAlpZF9wcmVmaXiUaAaMG3N0cmlwX2VsZW1lbnRzX3dpdGhfY2xhc3Nlc5ROjA1zdHJpcF9jbGFzc2VzlE51jARib3RolH2UjApfb3B0aW9uc1RvlIwFX2JvdGiUjAtfb2xkX3NvdXJjZZSMTy9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvLnRveC9kb2NzL3N0YWdlMF9vdXQvYXV0b2FwaS+UjAtfbmV3X3NvdXJjZZSMCWRvYy9kaWZmc5Rq1g8AAGrXDwAAjBZpZ25vcmVfaW5fc2VjdGlvbl9uYW1llF2UKIwDZGFvlIwEZm9ya5SMCXRhbmdlcmluZZSMB3doaXN0bGWUZXVijAhyZXBvcnRlcpROjBBpbmRpcmVjdF90YXJnZXRzlF2UjBFzdWJzdGl0dXRpb25fZGVmc5R9lIwSc3Vic3RpdHV0aW9uX25hbWVzlH2UjAhyZWZuYW1lc5R9lIwGcmVmaWRzlH2UjAduYW1laWRzlH2UjAluYW1ldHlwZXOUfZRoEH2UjA1mb290bm90ZV9yZWZzlH2UjA1jaXRhdGlvbl9yZWZzlH2UjA1hdXRvZm9vdG5vdGVzlF2UjBFhdXRvZm9vdG5vdGVfcmVmc5RdlIwQc3ltYm9sX2Zvb3Rub3Rlc5RdlIwUc3ltYm9sX2Zvb3Rub3RlX3JlZnOUXZSMCWZvb3Rub3Rlc5SVzAAAAAAAAABdlIwJY2l0YXRpb25zlF2UjBJhdXRvZm9vdG5vdGVfc3RhcnSUSwGMFXN5bWJvbF9mb290bm90ZV9zdGFydJRLAIwKaWRfY291bnRlcpSMC2NvbGxlY3Rpb25zlIwHQ291bnRlcpSTlH2UhZRSlIwOcGFyc2VfbWVzc2FnZXOUXZSMEnRyYW5zZm9ybV9tZXNzYWdlc5RdlIwLdHJhbnNmb3JtZXKUTowLaW5jbHVkZV9sb2eUXZSMCmRlY29yYXRpb26UTmghaAN1Yi4=