gASVe+0AAAAAAACMDmRvY3V0aWxzLm5vZGVzlIwIZG9jdW1lbnSUk5QpgZR9lCiMCXJhd3NvdXJjZZSMAJSMCGNoaWxkcmVulF2UKGgAjAZ0YXJnZXSUk5QpgZR9lChoBWgGaAddlIwKYXR0cmlidXRlc5R9lCiMA2lkc5RdlIw4bW9kdWxlLWV0aGVyZXVtLnRhbmdlcmluZV93aGlzdGxlLnZtLmluc3RydWN0aW9ucy5zeXN0ZW2UYYwHY2xhc3Nlc5RdlIwFbmFtZXOUXZSMCGR1cG5hbWVzlF2UjAhiYWNrcmVmc5RdlIwFaXNtb2SUiHWMB3RhZ25hbWWUaAmMBnNvdXJjZZSMeS9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vdGFuZ2VyaW5lX3doaXN0bGUvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5yc3SUjARsaW5llEsBjAZwYXJlbnSUaAOMCV9kb2N1bWVudJRoA3VijA9zcGhpbnguYWRkbm9kZXOUjAVpbmRleJSTlCmBlH2UKGgFaAZoB12UaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwHZW50cmllc5RdlCiMBHBhaXKUjDltb2R1bGU7IGV0aGVyZXVtLnRhbmdlcmluZV93aGlzdGxlLnZtLmluc3RydWN0aW9ucy5zeXN0ZW2UaBJoBk50lGF1aBxoI2gdaB5oH0sCaCBoA2ghaAN1YmgAjAdzZWN0aW9ulJOUKYGUfZQoaAVoBmgHXZQoaACMBXRpdGxllJOUKYGUfZQoaAWMMkV0aGVyZXVtIFZpcnR1YWwgTWFjaGluZSAoRVZNKSBTeXN0ZW0gSW5zdHJ1Y3Rpb25zlGgHXZRoAIwEVGV4dJSTlIwyRXRoZXJldW0gVmlydHVhbCBNYWNoaW5lIChFVk0pIFN5c3RlbSBJbnN0cnVjdGlvbnOUhZSBlH2UKGgFaAZoIGg6aCFoA2gdjFwvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzLy50b3gvZG9jcy9zdGFnZTBfb3V0L2F1dG9hcGkvID0+IGRvYy9kaWZmc5RoH0sAdWJhaA59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lGgZXZR1aBxqoQIAAGgdTmgfTmggap4CAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAhpbnRlcm5hbJSIjAVyZWZpZJSMOGV0aGVyZXVtLnRhbmdlcmluZV93aGlzdGxlLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0uY3JlYXRllIwIcmVmdGl0bGWUjDhldGhlcmV1bS50YW5nZXJpbmVfd2hpc3RsZS52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmNyZWF0ZZR1aBxobWgdTmgfTmggapoCAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHYyKL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9kb2MvYXV0b2FwaS9ldGhlcmV1bS90YW5nZXJpbmVfd2hpc3RsZS92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdDozNzo8YXV0b3N1bW1hcnk+lGgfSwFoIGqXAgAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGqVAgAAaB1OaB9OaCBqkgIAAHViapYCAAApgZR9lChoBWgGaAddlGhpKYGUfZQoaAWMK0NyZWF0ZXMgYSBuZXcgYWNjb3VudCB3aXRoIGFzc29jaWF0ZWQgY29kZS6UaAddlGg/jCtDcmVhdGVzIGEgbmV3IGFjY291bnQgd2l0aCBhc3NvY2lhdGVkIGNvZGUulIWUgZR9lChoBWgGaCBqzgIAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIovaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL3RhbmdlcmluZV93aGlzdGxlL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjM3OjxhdXRvc3VtbWFyeT6UaB9LAWggassCAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcapUCAABoHU5oH05oIGqSAgAAdWJlaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGqQAgAAaB1OaB9OaCBqjQIAAHViapECAAApgZR9lChoBWgGaAddlChqlgIAACmBlH2UKGgFaAZoB12UaGkpgZR9lChoBYxKOm9iajpgcmV0dXJuXyA8ZXRoZXJldW0udGFuZ2VyaW5lX3doaXN0bGUudm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5yZXR1cm5fPmCUaAddlGhuKYGUfZQoaAVoBmgHXZRqogIAACmBlH2UKGgFavECAABoB12UaD+MB3JldHVybl+UhZSBlH2UKGgFaAZoIGr2AgAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlChqrQIAAIwCcHmUjAZweS1vYmqUZWgVXZRoF12UaBldlHVoHGqhAgAAaB1OaB9OaCBq8wIAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMCGludGVybmFslIiMBXJlZmlklIw5ZXRoZXJldW0udGFuZ2VyaW5lX3doaXN0bGUudm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5yZXR1cm5flIwIcmVmdGl0bGWUjDlldGhlcmV1bS50YW5nZXJpbmVfd2hpc3RsZS52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLnJldHVybl+UdWgcaG1oHU5oH05oIGrvAgAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB2Mii9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vdGFuZ2VyaW5lX3doaXN0bGUvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5yc3Q6Mzc6PGF1dG9zdW1tYXJ5PpRoH0sBaCBq7AIAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxqlQIAAGgdTmgfTmggaukCAAB1YmqWAgAAKYGUfZQoaAVoBmgHXZRoaSmBlH2UKGgFjCZIYWx0cyBleGVjdXRpb24gcmV0dXJuaW5nIG91dHB1dCBkYXRhLpRoB12UaD+MJkhhbHRzIGV4ZWN1dGlvbiByZXR1cm5pbmcgb3V0cHV0IGRhdGEulIWUgZR9lChoBWgGaCBqIAMAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIovaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL3RhbmdlcmluZV93aGlzdGxlL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjM3OjxhdXRvc3VtbWFyeT6UaB9LAWggah0DAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcapUCAABoHU5oH05oIGrpAgAAdWJlaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGqQAgAAaB1OaB9OaCBqjQIAAHViapECAAApgZR9lChoBWgGaAddlChqlgIAACmBlH2UKGgFaAZoB12UaGkpgZR9lChoBYxUOm9iajpgZ2VuZXJpY19jYWxsIDxldGhlcmV1bS50YW5nZXJpbmVfd2hpc3RsZS52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmdlbmVyaWNfY2FsbD5glGgHXZRobimBlH2UKGgFaAZoB12UaqICAAApgZR9lChoBWpDAwAAaAddlGg/jAxnZW5lcmljX2NhbGyUhZSBlH2UKGgFaAZoIGpIAwAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlChqrQIAAIwCcHmUjAZweS1vYmqUZWgVXZRoF12UaBldlHVoHGqhAgAAaB1OaB9OaCBqRQMAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMCGludGVybmFslIiMBXJlZmlklIw+ZXRoZXJldW0udGFuZ2VyaW5lX3doaXN0bGUudm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5nZW5lcmljX2NhbGyUjAhyZWZ0aXRsZZSMPmV0aGVyZXVtLnRhbmdlcmluZV93aGlzdGxlLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0uZ2VuZXJpY19jYWxslHVoHGhtaB1OaB9OaCBqQQMAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIovaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL3RhbmdlcmluZV93aGlzdGxlL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjM3OjxhdXRvc3VtbWFyeT6UaB9LAWggaj4DAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcapUCAABoHU5oH05oIGo7AwAAdWJqlgIAACmBlH2UKGgFaAZoB12UaGkpgZR9lChoBYw4UGVyZm9ybSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgYENBTEwqYCBmYW1pbHkgb2Ygb3Bjb2Rlcy6UaAddlChoP4weUGVyZm9ybSB0aGUgY29yZSBsb2dpYyBvZiB0aGUglIWUgZR9lChoBWgGaCBqcgMAAGghaANoHWhEaB9LAHViaACMD3RpdGxlX3JlZmVyZW5jZZSTlCmBlH2UKGgFjAdgQ0FMTCpglGgHXZRoP4wFQ0FMTCqUhZSBlH2UKGgFaAZoIGp8AwAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGp6AwAAaB1OaB9OaCBqcgMAAHViaD+MEyBmYW1pbHkgb2Ygb3Bjb2Rlcy6UhZSBlH2UKGgFaAZoIGpyAwAAaCFoA2gdaERoH0sAdWJlaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB2Mii9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vdGFuZ2VyaW5lX3doaXN0bGUvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5yc3Q6Mzc6PGF1dG9zdW1tYXJ5PpRoH0sBaCBqbwMAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxqlQIAAGgdTmgfTmggajsDAAB1YmVoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcapACAABoHU5oH05oIGqNAgAAdWJqkQIAACmBlH2UKGgFaAZoB12UKGqWAgAAKYGUfZQoaAVoBmgHXZRoaSmBlH2UKGgFjEQ6b2JqOmBjYWxsIDxldGhlcmV1bS50YW5nZXJpbmVfd2hpc3RsZS52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmNhbGw+YJRoB12UaG4pgZR9lChoBWgGaAddlGqiAgAAKYGUfZQoaAVqqQMAAGgHXZRoP4wEY2FsbJSFlIGUfZQoaAVoBmggaq4DAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UKGqtAgAAjAJweZSMBnB5LW9iapRlaBVdlGgXXZRoGV2UdWgcaqECAABoHU5oH05oIGqrAwAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwIaW50ZXJuYWyUiIwFcmVmaWSUjDZldGhlcmV1bS50YW5nZXJpbmVfd2hpc3RsZS52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmNhbGyUjAhyZWZ0aXRsZZSMNmV0aGVyZXVtLnRhbmdlcmluZV93aGlzdGxlLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0uY2FsbJR1aBxobWgdTmgfTmggaqcDAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHYyKL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9kb2MvYXV0b2FwaS9ldGhlcmV1bS90YW5nZXJpbmVfd2hpc3RsZS92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdDozNzo8YXV0b3N1bW1hcnk+lGgfSwFoIGqkAwAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGqVAgAAaB1OaB9OaCBqoQMAAHViapYCAAApgZR9lChoBWgGaAddlGhpKYGUfZQoaAWMHU1lc3NhZ2UtY2FsbCBpbnRvIGFuIGFjY291bnQulGgHXZRoP4wdTWVzc2FnZS1jYWxsIGludG8gYW4gYWNjb3VudC6UhZSBlH2UKGgFaAZoIGrYAwAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB2Mii9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vdGFuZ2VyaW5lX3doaXN0bGUvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5yc3Q6Mzc6PGF1dG9zdW1tYXJ5PpRoH0sBaCBq1QMAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxqlQIAAGgdTmgfTmggaqEDAAB1YmVoDn2U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aXMgbWV0aG9kCiAgICBmcm9tIC4uLnZtLmludGVycHJldGVyIGltcG9ydCBTVEFDS19ERVBUSF9MSU1JVCwgcHJvY2Vzc19jcmVhdGVfbWVzc2FnZQoKICAgICMgU1RBQ0sKICAgIGVuZG93bWVudCA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksIFsobWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZSldCiAgICApCgogICAgY2hhcmdlX2dhcyhldm0sIEdBU19DUkVBVEUgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgY3JlYXRlX21lc3NhZ2VfZ2FzID0gbWF4X21lc3NhZ2VfY2FsbF9nYXMoVWludChldm0uZ2FzX2xlZnQpKQogICAgZXZtLmdhc19sZWZ0IC09IFUyNTYoY3JlYXRlX21lc3NhZ2VfZ2FzKQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgc2VuZGVyX2FkZHJlc3MgPSBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgc2VuZGVyID0gZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgc2VuZGVyX2FkZHJlc3MpCgogICAgY29udHJhY3RfYWRkcmVzcyA9IGNvbXB1dGVfY29udHJhY3RfYWRkcmVzcygKICAgICAgICBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkubm9uY2UsCiAgICApCgogICAgaWYgKAogICAgICAgIHNlbmRlci5iYWxhbmNlIDwgZW5kb3dtZW50CiAgICAgICAgb3Igc2VuZGVyLm5vbmNlID09IFVpbnQoMioqNjQgLSAxKQogICAgICAgIG9yIGV2bS5tZXNzYWdlLmRlcHRoICsgMSA+IFNUQUNLX0RFUFRIX0xJTUlUCiAgICApOgogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIGV2bS5nYXNfbGVmdCArPSBjcmVhdGVfbWVzc2FnZV9nYXMKICAgIGVsaWYgYWNjb3VudF9oYXNfY29kZV9vcl9ub25jZShldm0uZW52LnN0YXRlLCBjb250cmFjdF9hZGRyZXNzKToKICAgICAgICBpbmNyZW1lbnRfbm9uY2UoZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICBlbHNlOgogICAgICAgIGNhbGxfZGF0YSA9IG1lbW9yeV9yZWFkX2J5dGVzKAogICAgICAgICAgICBldm0ubWVtb3J5LCBtZW1vcnlfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9zaXplCiAgICAgICAgKQoKICAgICAgICBpbmNyZW1lbnRfbm9uY2UoZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpCgogICAgICAgIGNoaWxkX21lc3NhZ2UgPSBNZXNzYWdlKAogICAgICAgICAgICBjYWxsZXI9ZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgICAgIHRhcmdldD1CeXRlczAoKSwKICAgICAgICAgICAgZ2FzPVUyNTYoY3JlYXRlX21lc3NhZ2VfZ2FzKSwKICAgICAgICAgICAgdmFsdWU9ZW5kb3dtZW50LAogICAgICAgICAgICBkYXRhPWIiIiwKICAgICAgICAgICAgY29kZT1jYWxsX2RhdGEsCiAgICAgICAgICAgIGN1cnJlbnRfdGFyZ2V0PWNvbnRyYWN0X2FkZHJlc3MsCiAgICAgICAgICAgIGRlcHRoPWV2bS5tZXNzYWdlLmRlcHRoICsgMSwKICAgICAgICAgICAgY29kZV9hZGRyZXNzPU5vbmUsCiAgICAgICAgICAgIHNob3VsZF90cmFuc2Zlcl92YWx1ZT1UcnVlLAogICAgICAgICkKICAgICAgICBjaGlsZF9ldm0gPSBwcm9jZXNzX2NyZWF0ZV9tZXNzYWdlKGNoaWxkX21lc3NhZ2UsIGV2bS5lbnYpCgogICAgICAgIGlmIGNoaWxkX2V2bS5oYXNfZXJyZWQ6CiAgICAgICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX2Vycm9yKGV2bSwgY2hpbGRfZXZtKQogICAgICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBpbmNvcnBvcmF0ZV9jaGlsZF9vbl9zdWNjZXNzKGV2bSwgY2hpbGRfZXZtKQogICAgICAgICAgICBwdXNoKAogICAgICAgICAgICAgICAgZXZtLnN0YWNrLCBVMjU2LmZyb21fYmVfYnl0ZXMoY2hpbGRfZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpCiAgICAgICAgICAgICkKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgZXZtLnBjICs9IDEKlGgHXZRoP1gfCQAAZGVmIGNyZWF0ZShldm06IEV2bSkgLT4gTm9uZToKICAgICMgVGhpcyBpbXBvcnQgY2F1c2VzIGEgY2lyY3VsYXIgaW1wb3J0IGVycm9yCiAgICAjIGlmIGl0J3Mgbm90IG1vdmVkIGluc2lkZSB0aGlzIG1ldGhvZAogICAgZnJvbSAuLi52bS5pbnRlcnByZXRlciBpbXBvcnQgU1RBQ0tfREVQVEhfTElNSVQsIHByb2Nlc3NfY3JlYXRlX21lc3NhZ2UKCiAgICAjIFNUQUNLCiAgICBlbmRvd21lbnQgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9zaXplID0gcG9wKGV2bS5zdGFjaykKCiAgICAjIEdBUwogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LCBbKG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUpXQogICAgKQoKICAgIGNoYXJnZV9nYXMoZXZtLCBHQVNfQ1JFQVRFICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgIGNyZWF0ZV9tZXNzYWdlX2dhcyA9IG1heF9tZXNzYWdlX2NhbGxfZ2FzKFVpbnQoZXZtLmdhc19sZWZ0KSkKICAgIGV2bS5nYXNfbGVmdCAtPSBVMjU2KGNyZWF0ZV9tZXNzYWdlX2dhcykKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIHNlbmRlcl9hZGRyZXNzID0gZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKICAgIHNlbmRlciA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIHNlbmRlcl9hZGRyZXNzKQoKICAgIGNvbnRyYWN0X2FkZHJlc3MgPSBjb21wdXRlX2NvbnRyYWN0X2FkZHJlc3MoCiAgICAgICAgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpLm5vbmNlLAogICAgKQoKICAgIGlmICgKICAgICAgICBzZW5kZXIuYmFsYW5jZSA8IGVuZG93bWVudAogICAgICAgIG9yIHNlbmRlci5ub25jZSA9PSBVaW50KDIqKjY0IC0gMSkKICAgICAgICBvciBldm0ubWVzc2FnZS5kZXB0aCArIDEgPiBTVEFDS19ERVBUSF9MSU1JVAogICAgKToKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gY3JlYXRlX21lc3NhZ2VfZ2FzCiAgICBlbGlmIGFjY291bnRfaGFzX2NvZGVfb3Jfbm9uY2UoZXZtLmVudi5zdGF0ZSwgY29udHJhY3RfYWRkcmVzcyk6CiAgICAgICAgaW5jcmVtZW50X25vbmNlKGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KQogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgZWxzZToKICAgICAgICBjYWxsX2RhdGEgPSBtZW1vcnlfcmVhZF9ieXRlcygKICAgICAgICAgICAgZXZtLm1lbW9yeSwgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZQogICAgICAgICkKCiAgICAgICAgaW5jcmVtZW50X25vbmNlKGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KQoKICAgICAgICBjaGlsZF9tZXNzYWdlID0gTWVzc2FnZSgKICAgICAgICAgICAgY2FsbGVyPWV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgICAgICB0YXJnZXQ9Qnl0ZXMwKCksCiAgICAgICAgICAgIGdhcz1VMjU2KGNyZWF0ZV9tZXNzYWdlX2dhcyksCiAgICAgICAgICAgIHZhbHVlPWVuZG93bWVudCwKICAgICAgICAgICAgZGF0YT1iIiIsCiAgICAgICAgICAgIGNvZGU9Y2FsbF9kYXRhLAogICAgICAgICAgICBjdXJyZW50X3RhcmdldD1jb250cmFjdF9hZGRyZXNzLAogICAgICAgICAgICBkZXB0aD1ldm0ubWVzc2FnZS5kZXB0aCArIDEsCiAgICAgICAgICAgIGNvZGVfYWRkcmVzcz1Ob25lLAogICAgICAgICAgICBzaG91bGRfdHJhbnNmZXJfdmFsdWU9VHJ1ZSwKICAgICAgICApCiAgICAgICAgY2hpbGRfZXZtID0gcHJvY2Vzc19jcmVhdGVfbWVzc2FnZShjaGlsZF9tZXNzYWdlLCBldm0uZW52KQoKICAgICAgICBpZiBjaGlsZF9ldm0uaGFzX2VycmVkOgogICAgICAgICAgICBpbmNvcnBvcmF0ZV9jaGlsZF9vbl9lcnJvcihldm0sIGNoaWxkX2V2bSkKICAgICAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaW5jb3Jwb3JhdGVfY2hpbGRfb25fc3VjY2Vzcyhldm0sIGNoaWxkX2V2bSkKICAgICAgICAgICAgcHVzaCgKICAgICAgICAgICAgICAgIGV2bS5zdGFjaywgVTI1Ni5mcm9tX2JlX2J5dGVzKGNoaWxkX2V2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KQogICAgICAgICAgICApCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIGV2bS5wYyArPSAxCpSFlIGUfZQoaAVoBmggahAGAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAZzb3VyY2WUjGovaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL3NyYy9ldGhlcmV1bS90YW5nZXJpbmVfd2hpc3RsZS92bS9pbnN0cnVjdGlvbnMvc3lzdGVtLnB5lIwJeG1sOnNwYWNllGosAgAAjAVmb3JjZZSJjAhsYW5ndWFnZZSMBnB5dGhvbpSMDmhpZ2hsaWdodF9hcmdzlH2UjAtsaW5lbm9zdGFydJRLAXOMB2xpbmVub3OUiXVoHGoOBgAAaB1oHmgfSzdoIGoiBQAAdWJlaA59lChoEF2UagwBAABhaBNdlGgVXZSMBmNyZWF0ZZRhaBddlGgZXZR1aBxoM2gdaB5oH0sqaCBqEQUAAGghaAN1Ymg0KYGUfZQoaAVoBmgHXZQoaDkpgZR9lChoBYwHcmV0dXJuX5RoB12UaG4pgZR9lChoBYwHcmV0dXJuX5RoB12UaD+MBnJldHVybpSFlIGUfZQoaAVoBmggajYGAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjARuYW1llIwGcmV0dXJulIwFcmVmaWSUai4BAAB1aBxobWgdTmgfTmggajIGAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaDhoHWgeaB9LPGggai8GAAB1YmgkKYGUfZQoaAVoBmgHXZRoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAdlbnRyaWVzlF2UdWgcaCNoHU5oH05oIGovBgAAdWJqPwUAACmBlH2UKGgFaAZoB12UKGpEBQAAKYGUfZQoaAWMDHJldHVybl8oZXZtKZRoB12UKGpKBQAAKYGUfZQoaAWMB3JldHVybl+UaAddlGg/jAdyZXR1cm5flIWUgZR9lChoBWgGaCBqXwYAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZQoalYFAABqVwUAAGpYBQAAalkFAABlaBVdlGgXXZRoGV2UjAl4bWw6c3BhY2WUaiwCAAB1aBxqSQUAAGgdaB5oH05oIGpbBgAAdWJqXwUAACmBlH2UKGgFjANldm2UaAddlGplBQAAKYGUfZQoaAWMA2V2bZRoB12UamsFAAApgZR9lChoBWgGaAddlGg/jANldm2UhZSBlH2UKGgFaAZoIGp2BgAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGp2BQAAYWgVXZRoF12UaBldlHVoHGpqBQAAaB1OaB9OaCBqcgYAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMCXhtbDpzcGFjZZRqLAIAAHVoHGpkBQAAaB1OaB9OaCBqbgYAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMCXhtbDpzcGFjZZRqLAIAAHVoHGpeBQAAaB1oHmgfTmggalsGAAB1YmVoDn2UKGgQXZSMOWV0aGVyZXVtLnRhbmdlcmluZV93aGlzdGxlLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0ucmV0dXJuX5RhaBNdlChqjAUAAGqNBQAAjAJweZRqjwUAAGqQBQAAZWgVXZRoF12UaBldlIwGbW9kdWxllGqVBQAAjAVjbGFzc5RoBowIZnVsbG5hbWWUamEGAAB1aBxqQwUAAGgdaB5oH0s/aCBqWAYAAHViapkFAAApgZR9lChoBWgGaAddlChoaSmBlH2UKGgFjCZIYWx0cyBleGVjdXRpb24gcmV0dXJuaW5nIG91dHB1dCBkYXRhLpRoB12UaD+MJkhhbHRzIGV4ZWN1dGlvbiByZXR1cm5pbmcgb3V0cHV0IGRhdGEulIWUgZR9lChoBWgGaCBqnwYAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdaB5oH0tCaCBqnAYAAHViaqwFAAApgZR9lChoBWgGaAddlGqxBQAAKYGUfZQoaAVoBmgHXZQoarYFAAApgZR9lChoBYwKUGFyYW1ldGVyc5RoB12UaD+MClBhcmFtZXRlcnOUhZSBlH2UKGgFaAZoIGqzBgAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGq1BQAAaB1oHmgfSwBoIGqwBgAAdWJqxgUAACmBlH2UKGgFaAZoB12UaGkpgZR9lChoBYwdZXZtIC0tIFRoZSBjdXJyZW50IEVWTSBmcmFtZS6UaAddlChqzwUAACmBlH2UKGgFjANldm2UaAddlGg/jANldm2UhZSBlH2UKGgFaAZoIGrIBgAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwLcmVmc3BlY2lmaWOUiIwJcHk6bW9kdWxllGqVBQAAjAhweTpjbGFzc5ROdWgcas4FAABoHU5oH05oIGrEBgAAdWJoP4wbIOKAkyBUaGUgY3VycmVudCBFVk0gZnJhbWUulIWUgZR9lChoBWgGaCBqxAYAAGghaANoHWhEaB9LAHViZWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdTmgfTmggasEGAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcasUFAABoHU5oH05oIGqwBgAAdWJlaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGqwBQAAaB1OaB9OaCBqrQYAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxqqwUAAGgdTmgfTmggapwGAAB1YmVoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcapgFAABoHWgeaB9OaCBqWAYAAHViZWgOfZQoaBBdlGgTXZQoapUGAACMCGZ1bmN0aW9ulGVoFV2UaBddlGgZXZSMBmRvbWFpbpRqlQYAAIwHb2JqdHlwZZRq/gYAAIwIZGVzY3R5cGWUav4GAACMB25vaW5kZXiUiXVoHGo+BQAAaB1OaB9OaCBqLwYAAHViag8GAAApgZR9lChoBVgHAgAAZGVmIHJldHVybl8oZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBtZW1vcnlfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksIFsobWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZSldCiAgICApCgogICAgY2hhcmdlX2dhcyhldm0sIEdBU19aRVJPICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgZXZtLm91dHB1dCA9IG1lbW9yeV9yZWFkX2J5dGVzKAogICAgICAgIGV2bS5tZW1vcnksIG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUKICAgICkKCiAgICBldm0ucnVubmluZyA9IEZhbHNlCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIHBhc3MKlGgHXZRoP1gHAgAAZGVmIHJldHVybl8oZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBtZW1vcnlfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksIFsobWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZSldCiAgICApCgogICAgY2hhcmdlX2dhcyhldm0sIEdBU19aRVJPICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgZXZtLm91dHB1dCA9IG1lbW9yeV9yZWFkX2J5dGVzKAogICAgICAgIGV2bS5tZW1vcnksIG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUKICAgICkKCiAgICBldm0ucnVubmluZyA9IEZhbHNlCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIHBhc3MKlIWUgZR9lChoBWgGaCBqBgcAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMBnNvdXJjZZSMai9ob21lL3J1bm5lci93b3JrL2V4ZWN1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dXRfc3RhcnRfcG9zaXRpb246IFUyNTYsCiAgICBtZW1vcnlfaW5wdXRfc2l6ZTogVTI1NiwKICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb246IFUyNTYsCiAgICBtZW1vcnlfb3V0cHV0X3NpemU6IFUyNTYsCikgLT4gTm9uZToKICAgIGZyb20gLi4udm0uaW50ZXJwcmV0ZXIgaW1wb3J0IFNUQUNLX0RFUFRIX0xJTUlULCBwcm9jZXNzX21lc3NhZ2UKCiAgICBpZiBldm0ubWVzc2FnZS5kZXB0aCArIDEgPiBTVEFDS19ERVBUSF9MSU1JVDoKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gZ2FzCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgcmV0dXJuCgogICAgY2FsbF9kYXRhID0gbWVtb3J5X3JlYWRfYnl0ZXMoCiAgICAgICAgZXZtLm1lbW9yeSwgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZQogICAgKQogICAgY29kZSA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGNvZGVfYWRkcmVzcykuY29kZQogICAgY2hpbGRfbWVzc2FnZSA9IE1lc3NhZ2UoCiAgICAgICAgY2FsbGVyPWNhbGxlciwKICAgICAgICB0YXJnZXQ9dG8sCiAgICAgICAgZ2FzPVUyNTYoZ2FzKSwKICAgICAgICB2YWx1ZT12YWx1ZSwKICAgICAgICBkYXRhPWNhbGxfZGF0YSwKICAgICAgICBjb2RlPWNvZGUsCiAgICAgICAgY3VycmVudF90YXJnZXQ9dG8sCiAgICAgICAgZGVwdGg9ZXZtLm1lc3NhZ2UuZGVwdGggKyAxLAogICAgICAgIGNvZGVfYWRkcmVzcz1jb2RlX2FkZHJlc3MsCiAgICAgICAgc2hvdWxkX3RyYW5zZmVyX3ZhbHVlPXNob3VsZF90cmFuc2Zlcl92YWx1ZSwKICAgICkKICAgIGNoaWxkX2V2bSA9IHByb2Nlc3NfbWVzc2FnZShjaGlsZF9tZXNzYWdlLCBldm0uZW52KQoKICAgIGlmIGNoaWxkX2V2bS5oYXNfZXJyZWQ6CiAgICAgICAgaW5jb3Jwb3JhdGVfY2hpbGRfb25fZXJyb3IoZXZtLCBjaGlsZF9ldm0pCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICBlbHNlOgogICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX3N1Y2Nlc3MoZXZtLCBjaGlsZF9ldm0pCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMSkpCgogICAgYWN0dWFsX291dHB1dF9zaXplID0gbWluKG1lbW9yeV9vdXRwdXRfc2l6ZSwgVTI1NihsZW4oY2hpbGRfZXZtLm91dHB1dCkpKQogICAgbWVtb3J5X3dyaXRlKAogICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICBjaGlsZF9ldm0ub3V0cHV0WzphY3R1YWxfb3V0cHV0X3NpemVdLAogICAgKQqUaAddlGg/WLYFAABkZWYgZ2VuZXJpY19jYWxsKAogICAgZXZtOiBFdm0sCiAgICBnYXM6IFVpbnQsCiAgICB2YWx1ZTogVTI1NiwKICAgIGNhbGxlcjogQWRkcmVzcywKICAgIHRvOiBBZGRyZXNzLAogICAgY29kZV9hZGRyZXNzOiBBZGRyZXNzLAogICAgc2hvdWxkX3RyYW5zZmVyX3ZhbHVlOiBib29sLAogICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uOiBVMjU2LAogICAgbWVtb3J5X2lucHV0X3NpemU6IFUyNTYsCiAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uOiBVMjU2LAogICAgbWVtb3J5X291dHB1dF9zaXplOiBVMjU2LAopIC0+IE5vbmU6CiAgICBmcm9tIC4uLnZtLmludGVycHJldGVyIGltcG9ydCBTVEFDS19ERVBUSF9MSU1JVCwgcHJvY2Vzc19tZXNzYWdlCgogICAgaWYgZXZtLm1lc3NhZ2UuZGVwdGggKyAxID4gU1RBQ0tfREVQVEhfTElNSVQ6CiAgICAgICAgZXZtLmdhc19sZWZ0ICs9IGdhcwogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIHJldHVybgoKICAgIGNhbGxfZGF0YSA9IG1lbW9yeV9yZWFkX2J5dGVzKAogICAgICAgIGV2bS5tZW1vcnksIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUKICAgICkKICAgIGNvZGUgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBjb2RlX2FkZHJlc3MpLmNvZGUKICAgIGNoaWxkX21lc3NhZ2UgPSBNZXNzYWdlKAogICAgICAgIGNhbGxlcj1jYWxsZXIsCiAgICAgICAgdGFyZ2V0PXRvLAogICAgICAgIGdhcz1VMjU2KGdhcyksCiAgICAgICAgdmFsdWU9dmFsdWUsCiAgICAgICAgZGF0YT1jYWxsX2RhdGEsCiAgICAgICAgY29kZT1jb2RlLAogICAgICAgIGN1cnJlbnRfdGFyZ2V0PXRvLAogICAgICAgIGRlcHRoPWV2bS5tZXNzYWdlLmRlcHRoICsgMSwKICAgICAgICBjb2RlX2FkZHJlc3M9Y29kZV9hZGRyZXNzLAogICAgICAgIHNob3VsZF90cmFuc2Zlcl92YWx1ZT1zaG91bGRfdHJhbnNmZXJfdmFsdWUsCiAgICApCiAgICBjaGlsZF9ldm0gPSBwcm9jZXNzX21lc3NhZ2UoY2hpbGRfbWVzc2FnZSwgZXZtLmVudikKCiAgICBpZiBjaGlsZF9ldm0uaGFzX2VycmVkOgogICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX2Vycm9yKGV2bSwgY2hpbGRfZXZtKQogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgZWxzZToKICAgICAgICBpbmNvcnBvcmF0ZV9jaGlsZF9vbl9zdWNjZXNzKGV2bSwgY2hpbGRfZXZtKQogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDEpKQoKICAgIGFjdHVhbF9vdXRwdXRfc2l6ZSA9IG1pbihtZW1vcnlfb3V0cHV0X3NpemUsIFUyNTYobGVuKGNoaWxkX2V2bS5vdXRwdXQpKSkKICAgIG1lbW9yeV93cml0ZSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9z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ICAgICAgZXZtLm1lbW9yeSwKICAgICAgICBbCiAgICAgICAgICAgIChtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplKSwKICAgICAgICAgICAgKG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9vdXRwdXRfc2l6ZSksCiAgICAgICAgXSwKICAgICkKICAgIF9hY2NvdW50X2V4aXN0cyA9IGFjY291bnRfZXhpc3RzKGV2bS5lbnYuc3RhdGUsIHRvKQogICAgY3JlYXRlX2dhc19jb3N0ID0gVWludCgwKSBpZiBfYWNjb3VudF9leGlzdHMgZWxzZSBHQVNfTkVXX0FDQ09VTlQKICAgIHRyYW5zZmVyX2dhc19jb3N0ID0gVWludCgwKSBpZiB2YWx1ZSA9PSAwIGVsc2UgR0FTX0NBTExfVkFMVUUKICAgIG1lc3NhZ2VfY2FsbF9nYXMgPSBjYWxjdWxhdGVfbWVzc2FnZV9jYWxsX2dhcygKICAgICAgICB2YWx1ZSwKICAgICAgICBnYXMsCiAgICAgICAgVWludChldm0uZ2FzX2xlZnQpLAogICAgICAgIGV4dGVuZF9tZW1vcnkuY29zdCwKICAgICAgICBHQVNfQ0FMTCArIGNyZWF0ZV9nYXNfY29zdCArIHRyYW5zZmVyX2dhc19jb3N0LAogICAgKQogICAgY2hhcmdlX2dhcyhldm0sIG1lc3NhZ2VfY2FsbF9nYXMuY29zdCArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIHNlbmRlcl9iYWxhbmNlID0gZ2V0X2FjY291bnQoCiAgICAgICAgZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKICAgICkuYmFsYW5jZQogICAgaWYgc2VuZGVyX2JhbGFuY2UgPCB2YWx1ZToKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kCiAgICBlbHNlOgogICAgICAgIGdlbmVyaWNfY2FsbCgKICAgICAgICAgICAgZXZtLAogICAgICAgICAgICBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQsCiAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICAgICAgdG8sCiAgICAgICAgICAgIHRvLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgICAgIG1lbW9yeV9pbnB1dF9zaXplLAogICAgICAgICAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgICAgICBtZW1vcnlfb3V0cHV0X3NpemUsCiAgICAgICAgKQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBldm0ucGMgKz0gMQqUaAddlChoP1glAgAAZGVmIGNhbGwoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBnYXMgPSBVaW50KHBvcChldm0uc3RhY2spKQogICAgdG8gPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQogICAgdmFsdWUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKCiAgICAjIEdBUwogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9z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ZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICB0byA9IGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CgogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQogICAgdHJhbnNmZXJfZ2FzX2Nvc3QgPSBVaW50KDApIGlmIHZhbHVlID09IDAgZWxzZSBHQVNfQ0FMTF9WQUxVRQogICAgbWVzc2FnZV9jYWxsX2dhcyA9IGNhbGN1bGF0ZV9tZXNzYWdlX2NhbGxfZ2FzKAogICAgICAgIHZhbHVlLAogICAgICAgIGdhcywKICAgICAgICBVaW50KGV2bS5nYXNfbGVmdCksCiAgICAgICAgZXh0ZW5kX21lbW9yeS5jb3N0LAogICAgICAgIEdBU19DQUxMICsgdHJhbnNmZXJfZ2FzX2Nvc3QsCiAgICApCiAgICBjaGFyZ2VfZ2FzKGV2bSwgbWVzc2FnZV9jYWxsX2dhcy5jb3N0ICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgc2VuZGVyX2JhbGFuY2UgPSBnZXRfYWNjb3VudCgKICAgICAgICBldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgKS5iYWxhbmNlCiAgICBpZiBzZW5kZXJfYmFsYW5jZSA8IHZhbHVlOgogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIGV2bS5nYXNfbGVmdCArPSBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQKICAgIGVsc2U6CiAgICAgICAgZ2VuZXJpY19jYWxsKAogICAgICAgICAgICBldm0sCiAgICAgICAgICAgIG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZCwKICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgICAgICB0bywKICAgICAgICAgICAgY29kZV9hZGRyZXNzLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgICAgIG1lbW9yeV9pbnB1dF9zaXplLAogICAgICAgICAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgICAgICBtZW1vcnlfb3V0cHV0X3NpemUsCiAgICAgICAgKQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBldm0ucGMgKz0gMQqUaAddlGg/WDIGAABkZWYgY2FsbGNvZGUoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBnYXMgPSBVaW50KHBvcChldm0uc3RhY2spKQogICAgY29kZV9hZGRyZXNzID0gdG9fYWRkcmVzcyhwb3AoZXZtLnN0YWNrKSkKICAgIHZhbHVlID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIHRvID0gZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAgWwogICAgICAgICAgICAobWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZSksCiAgICAgICAgICAgIChtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfb3V0cHV0X3NpemUpLAogICAgICAgIF0sCiAgICApCiAgICB0cmFuc2Zlcl9nYXNfY29zdCA9IFVpbnQoMCkgaWYgdmFsdWUgPT0gMCBlbHNlIEdBU19DQUxMX1ZBTFVFCiAgICBtZXNzYWdlX2NhbGxfZ2FzID0gY2FsY3VsYXRlX21lc3NhZ2VfY2FsbF9nYXMoCiAgICAgICAgdmFsdWUsCiAgICAgICAgZ2FzLAogICAgICAgIFVpbnQoZXZtLmdhc19sZWZ0KSwKICAgICAgICBleHRlbmRfbWVtb3J5LmNvc3QsCiAgICAgICAgR0FTX0NBTEwgKyB0cmFuc2Zlcl9nYXNfY29zdCwKICAgICkKICAgIGNoYXJnZV9nYXMoZXZtLCBtZXNzYWdlX2NhbGxfZ2FzLmNvc3QgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBzZW5kZXJfYmFsYW5jZSA9IGdldF9hY2NvdW50KAogICAgICAgIGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CiAgICApLmJhbGFuY2UKICAgIGlmIHNlbmRlcl9iYWxhbmNlIDwgdmFsdWU6CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgZXZtLmdhc19sZWZ0ICs9IG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZAogICAgZWxzZToKICAgICAgICBnZW5lcmljX2NhbGwoCiAgICAgICAgICAgIGV2bSwKICAgICAgICAgICAgbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kLAogICAgICAgICAgICB2YWx1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IyBTVEFDSwogICAgYmVuZWZpY2lhcnkgPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQoKICAgICMgR0FTCiAgICBpZiBhY2NvdW50X2V4aXN0cyhldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSk6CiAgICAgICAgY2hhcmdlX2dhcyhldm0sIEdBU19TRUxGX0RFU1RSVUNUKQogICAgZWxzZToKICAgICAgICBjaGFyZ2VfZ2FzKGV2bSwgR0FTX1NFTEZfREVTVFJVQ1QgKyBHQVNfU0VMRl9ERVNUUlVDVF9ORVdfQUNDT1VOVCkKCiAgICAjIE9QRVJBVElPTgogICAgb3JpZ2luYXRvciA9IGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CiAgICBiZW5lZmljaWFyeV9iYWxhbmNlID0gZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgYmVuZWZpY2lhcnkpLmJhbGFuY2UKICAgIG9yaWdpbmF0b3JfYmFsYW5jZSA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIG9yaWdpbmF0b3IpLmJhbGFuY2UKCiAgICAjIEZpcnN0IFRyYW5zZmVyIHRvIGJlbmVmaWNpYXJ5CiAgICBzZXRfYWNjb3VudF9iYWxhbmNlKAogICAgICAgIGV2bS5lbnYuc3RhdGUsIGJlbmVmaWNpYXJ5LCBiZW5lZmljaWFyeV9iYWxhbmNlICsgb3JpZ2luYXRvcl9iYWxhbmNlCiAgICApCiAgICAjIE5leHQsIFplcm8gdGhlIGJhbGFuY2Ugb2YgdGhlIGFkZHJlc3MgYmVpbmcgZGVsZXRlZCAobXVzdCBjb21lIGFmdGVyCiAgICAjIHNlbmRpbmcgdG8gYmVuZWZpY2lhcnkgaW4gY2FzZSB0aGUgY29udHJhY3QgbmFtZWQgaXRzZWxmIGFzIHRoZQogICAgIyBiZW5lZmljaWFyeSkuCiAgICBzZXRfYWNjb3VudF9iYWxhbmNlKGV2bS5lbnYuc3RhdGUsIG9yaWdpbmF0b3IsIFUyNTYoMCkpCgogICAgIyByZWdpc3RlciBhY2NvdW50IGZvciBkZWxldGlvbgogICAgZXZtLmFjY291bnRzX3RvX2RlbGV0ZS5hZGQob3JpZ2luYXRvcikKCiAgICAjIEhBTFQgdGhlIGV4ZWN1dGlvbgogICAgZXZtLnJ1bm5pbmcgPSBGYWxzZQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBwYXNzCpRoB12UKGg/jG9kZWYgc2VsZmRlc3RydWN0KGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgYmVuZWZpY2lhcnkgPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQoKICAgICMgR0FTCiAgICBpZiCUhZSBlH2UKGgFaAZoIGpoDAAAaCFoA2gdaERoH0sAdWJqawUAACmBlH2UKGgFaAZoB12UaD+MHWFjY291bnRfZXhpc3RzKGV2bS5lbnYuc3RhdGUslIWUgZR9lChoBWgGaCBqcAwAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZSMD2NoYW5nZS1yZXBsYWNlZJRhaBVdlGgXXZRoGV2UdWgcamoFAABoIGpoDAAAaCFoA2gdaERoH0sAdWJqawUAACmBlH2UKGgFaAZoB12UaD9Y9wMAACgKICAgICAgICBub3QgaXNfYWNjb3VudF9hbGl2ZShldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSkKICAgICAgICBhbmQgZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpLmJhbGFuY2UgIT0gMAogICAgKToKICAgICAgICBjaGFyZ2VfZ2FzKGV2bSwgR0FTX1NFTEZfREVTVFJVQ1QgKyBHQVNfU0VMRl9ERVNUUlVDVF9ORVdfQUNDT1VOVCkKICAgIGVsc2U6CiAgICAgICAgY2hhcmdlX2dhcyhldm0sIEdBU19TRUxGX0RFU1RSVUNUKQoKICAgICMgT1BFUkFUSU9OCiAgICBvcmlnaW5hdG9yID0gZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKICAgIGJlbmVmaWNpYXJ5X2JhbGFuY2UgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSkuYmFsYW5jZQogICAgb3JpZ2luYXRvcl9iYWxhbmNlID0gZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgb3JpZ2luYXRvcikuYmFsYW5jZQoKICAgICMgRmlyc3QgVHJhbnNmZXIgdG8gYmVuZWZpY2lhcnkKICAgIHNldF9hY2NvdW50X2JhbGFuY2UoCiAgICAgICAgZXZtLmVudi5zdGF0ZSwgYmVuZWZpY2lhcnksIGJlbmVmaWNpYXJ5X2JhbGFuY2UgKyBvcmlnaW5hdG9yX2JhbGFuY2UKICAgICkKICAgICMgTmV4dCwgWmVybyB0aGUgYmFsYW5jZSBvZiB0aGUgYWRkcmVzcyBiZWluZyBkZWxldGVkIChtdXN0IGNvbWUgYWZ0ZXIKICAgICMgc2VuZGluZyB0byBiZW5lZmljaWFyeSBpbiBjYXNlIHRoZSBjb250cmFjdCBuYW1lZCBpdHNlbGYgYXMgdGhlCiAgICAjIGJlbmVmaWNpYXJ5KS4KICAgIHNldF9hY2NvdW50X2JhbGFuY2UoZXZtLmVudi5zdGF0ZSwgb3JpZ2luYXRvciwgVTI1NigwKSkKCiAgICAjIHJlZ2lzdGVyIGFjY291bnQgZm9yIGRlbGV0aW9uCiAgICBldm0uYWNjb3VudHNfdG9fZGVsZXRlLmFkZChvcmlnaW5hdG9yKQoKICAgICMgbWFyayBiZW5lZmljaWFyeSBhcyB0b3VjaGVkCiAgICBpZiBhY2NvdW50X2V4aXN0c19hbmRfaXNfZW1wdHkoZXZtLmVudi5zdGF0ZSyUhZSBlH2UKGgFaAZoIGp+DAAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlIwSY2hhbmdlLXJlcGxhY2VtZW50lGFoFV2UaBddlGgZXZR1aBxqagUAAGggamgMAABoIWgDaB1oRGgfSwB1Ymg/jBcgYmVuZWZpY2lhcnkpOgogICAgICAgIJSFlIGUfZQoaAVoBmggamgMAABoIWgDaB1oRGgfSwB1YmprBQAAKYGUfZQoaAVoBmgHXZRoP4x3Y2hhcmdlX2dhcyhldm0sIEdBU19TRUxGX0RFU1RSVUNUKQogICAgZWxzZToKICAgICAgICBjaGFyZ2VfZ2FzKGV2bSwgR0FTX1NFTEZfREVTVFJVQ1QgKyBHQVNfU0VMRl9ERVNUUlVDVF9ORVdfQUNDT1VOVCmUhZSBlH2UKGgFaAZoIGqQDAAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlIwPY2hhbmdlLXJlcGxhY2VklGFoFV2UaBddlGgZXZR1aBxqagUAAGggamgMAABoIWgDaB1oRGgfSwB1YmprBQAAKYGUfZQoaAVoBmgHXZRoP4wlZXZtLnRvdWNoZWRfYWNjb3VudHMuYWRkKGJlbmVmaWNpYXJ5KZSFlIGUfZQoaAVoBmggap4MAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UjBJjaGFuZ2UtcmVwbGFjZW1lbnSUYWgVXZRoF12UaBldlHVoHGpqBQAAaCBqaAwAAGghaANoHWhEaB9LAHViaD+MBwoKICAgICOUhZSBlH2UKGgFaAZoIGpoDAAAaCFoA2gdaERoH0sAdWJqawUAACmBlH2UKGgFaAZoB12UaD9YkQIAACBPUEVSQVRJT04KICAgIG9yaWdpbmF0b3IgPSBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgYmVuZWZpY2lhcnlfYmFsYW5jZSA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGJlbmVmaWNpYXJ5KS5iYWxhbmNlCiAgICBvcmlnaW5hdG9yX2JhbGFuY2UgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBvcmlnaW5hdG9yKS5iYWxhbmNlCgogICAgIyBGaXJzdCBUcmFuc2ZlciB0byBiZW5lZmljaWFyeQogICAgc2V0X2FjY291bnRfYmFsYW5jZSgKICAgICAgICBldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSwgYmVuZWZpY2lhcnlfYmFsYW5jZSArIG9yaWdpbmF0b3JfYmFsYW5jZQogICAgKQogICAgIyBOZXh0LCBaZXJvIHRoZSBiYWxhbmNlIG9mIHRoZSBhZGRyZXNzIGJlaW5nIGRlbGV0ZWQgKG11c3QgY29tZSBhZnRlcgogICAgIyBzZW5kaW5nIHRvIGJlbmVmaWNpYXJ5IGluIGNhc2UgdGhlIGNvbnRyYWN0IG5hbWVkIGl0c2VsZiBhcyB0aGUKICAgICMgYmVuZWZpY2lhcnkpLgogICAgc2V0X2FjY291bnRfYmFsYW5jZShldm0uZW52LnN0YXRlLCBvcmlnaW5hdG9yLCBVMjU2KDApKQoKICAgICMgcmVnaXN0ZXIgYWNjb3VudCBmb3IgZGVsZXRp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b3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAgWwogICAgICAgICAgICAobWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZSksCiAgICAgICAgICAgIChtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfb3V0cHV0X3NpemUpLAogICAgICAgIF0sCiAgICApCiAgICBtZXNzYWdlX2NhbGxfZ2FzID0gY2FsY3VsYXRlX21lc3NhZ2VfY2FsbF9nYXMoCiAgICAgICAgVTI1NigwKSwgZ2FzLCBVaW50KGV2bS5nYXNfbGVmdCksIGV4dGVuZF9tZW1vcnkuY29zdCwgR0FTX0NBTEwKICAgICkKICAgIGNoYXJnZV9nYXMoZXZtLCBtZXNzYWdlX2NhbGxfZ2FzLmNvc3QgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBnZW5lcmljX2NhbGwoCiAgICAgICAgZXZtLAogICAgICAgIG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZCwKICAgICAgICBldm0ubWVzc2FnZS52YWx1ZSwKICAgICAgICBldm0ubWVzc2FnZS5jYWxsZXIsCiAgICAgICAgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgY29kZV9hZGRyZXNzLAogICAgICAgIEZhbHNlLAogICAgICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICBtZW1vcnlfaW5wdXRfc2l6ZSwKICAgICAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSwKICAgICkKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgZXZtLnBjICs9IDEKlGgHXZRoP1iNBAAAZGVmIGRlbGVnYXRlY2FsbChldm06IEV2bSkgLT4gTm9uZToKICAgICMgU1RBQ0sKICAgIGdhcyA9IFVpbnQocG9wKGV2bS5zdGFjaykpCiAgICBjb2RlX2FkZHJlc3MgPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQogICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKCiAgICAjIEdBUwogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQogICAgbWVzc2FnZV9jYWxsX2dhcyA9IGNhbGN1bGF0ZV9tZXNzYWdlX2NhbGxfZ2FzKAogICAgICAgIFUyNTYoMCksIGdhcywgVWludChldm0uZ2FzX2xlZnQpLCBleHRlbmRfbWVtb3J5LmNvc3QsIEdBU19DQUxMCiAgICApCiAgICBjaGFyZ2VfZ2FzKGV2bSwgbWVzc2FnZV9jYWxsX2dhcy5jb3N0ICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgZ2VuZXJpY19jYWxsKAogICAgICAgIGV2bSwKICAgICAgICBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQsCiAgICAgICAgZXZtLm1lc3NhZ2UudmFsdWUsCiAgICAgICAgZXZtLm1lc3NhZ2UuY2FsbGVyLAogICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgIGNvZGVfYWRkcmVzcywKICAgICAgICBGYWxzZSwKICAgICAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgbWVtb3J5X2lucHV0X3NpemUsCiAgICAgICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICBtZW1vcnlfb3V0cHV0X3NpemUsCiAgICApCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIGV2bS5wYyArPSAxCpSFlIGUfZQoaAVoBmggaqINAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAZzb3VyY2WUjGovaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL3NyYy9ldGhlcmV1bS90YW5nZXJpbmVfd2hpc3RsZS92bS9pbnN0cnVjdGlvbnMvc3lzdGVtLnB5lIwJeG1sOnNwYWNllGosAgAAjAVmb3JjZZSJjAhsYW5ndWFnZZSMBnB5dGhvbpSMDmhpZ2hsaWdodF9hcmdzlH2UaiYGAABLAXOMB2xpbmVub3OUiXVoHGoOBgAAaB1oHmgfS6FoIGrYDAAAdWJlaA59lChoEF2UatgBAABhaBNdlGgVXZSMDGRlbGVnYXRlY2FsbJRhaBddlGgZXZR1aBxoM2gdaB5oH0uUaCBqEQUAAGghaAN1YmVoDn2UKGgQXZRo7WFoE12UaBVdlIwObW9kdWxlIGRldGFpbHOUYWgXXZRoGV2UdWgcaDNoHWgeaB9LJ2ggaDVoIWgDdWJlaA59lChoEF2UjDBldGhlcmV1bS12aXJ0dWFsLW1hY2hpbmUtZXZtLXN5c3RlbS1pbnN0cnVjdGlvbnOUYWgTXZRoFV2UjDJldGhlcmV1bSB2aXJ0dWFsIG1hY2hpbmUgKGV2bSkgc3lzdGVtIGluc3RydWN0aW9uc5RhaBddlGgZXZR1aBxoM2gdaB5oH0sEaCBoA2ghaAN1YmVoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAZzb3VyY2WUaER1aBxoAYwOY3VycmVudF9zb3VyY2WUaESMDGN1cnJlbnRfbGluZZRLAIwIc2V0dGluZ3OUjBFkb2N1dGlscy5mcm9udGVuZJSMBlZhbHVlc5STlCmBlH2UKIwMcmVwb3J0X2xldmVslEsCjApoYWx0X2xldmVslEsEjBFleGl0X3N0YXR1c19sZXZlbJRLBYwFZGVidWeUTowOd2FybmluZ19zdHJlYW2UTowJdHJhY2ViYWNrlE6MD291dHB1dF9lbmNvZGluZ5SMBXV0Zi04lIwdb3V0cHV0X2VuY29kaW5nX2Vycm9yX2hhbmRsZXKUjBF4bWxjaGFycmVmcmVwbGFjZZSMDmVycm9yX2VuY29kaW5nlIwFdXRmLTiUjBxlcnJvcl9lbmNvZGluZ19lcnJvcl9oYW5kbGVylIwQYmFja3NsYXNocmVwbGFjZZSME3JlY29yZF9kZXBlbmRlbmNpZXOUjA5kb2N1dGlscy51dGlsc5SMDkRlcGVuZGVuY3lMaXN0lJOUKYGUfZQojARsaXN0lF2UjARmaWxllE51YowGY29uZmlnlE6MDWR1bXBfc2V0dGluZ3OUTowOZHVtcF9pbnRlcm5hbHOUTowPZHVtcF90cmFuc2Zvcm1zlE6MD2R1bXBfcHNldWRvX3htbJROjBBleHBvc2VfaW50ZXJuYWxzlE6MDnN0cmljdF92aXNpdG9ylE6MD19kaXNhYmxlX2NvbmZpZ5ROjAdfc291cmNllE6MDF9kZXN0aW5hdGlvbpSMUWRvYy9kaWZmcy90YW5nZXJpbmVfd2hpc3RsZV9zcHVyaW91c19kcmFnb24vdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5waWNrbGU2NJSMDV9jb25maWdfZmlsZXOUXZSMEWxpbmVfbGVuZ3RoX2xpbWl0lE0QJ4wJdGFiX3dpZHRolEsIjBBzeW50YXhfaGlnaGxpZ2h0lIwEbG9uZ5SMDHNtYXJ0X3F1b3Rlc5SJjBNzbWFydHF1b3Rlc19sb2NhbGVzlE6MHWNoYXJhY3Rlcl9sZXZlbF9pbmxpbmVfbWFya3VwlImMBndyaXRlcpSMA3htbJSMGWNvbXBhcmVfc2VjdGlvbnNfYnlfbmFtZXOUSwGMDGR1bXBfcnN0ZGlmZpROjAVfYm90aJR9lChoOE6MCWdlbmVyYXRvcpROjAlkYXRlc3RhbXCUTowLc291cmNlX2xpbmuUTowKc291cmNlX3VybJROjA10b2NfYmFja2xpbmtzlGqVAgAAjBJmb290bm90ZV9iYWNrbGlua3OUSwGMDXNlY3RudW1feGZvcm2USwGMDmRvY3RpdGxlX3hmb3JtlEsBjA1kb2NpbmZvX3hmb3JtlEsBjBJzZWN0c3VidGl0bGVfeGZvcm2USwCMDnN0cmlwX2NvbW1lbnRzlE6MDmlucHV0X2VuY29kaW5nlE6MHGlucHV0X2VuY29kaW5nX2Vycm9yX2hhbmRsZXKUjAZzdHJpY3SUjA1sYW5ndWFnZV9jb2RllIwCZW6UjA5wZXBfcmVmZXJlbmNlc5ROjAxwZXBfYmFzZV91cmyUjB9odHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvlIwVcGVwX2ZpbGVfdXJsX3RlbXBsYXRllIwIcGVwLSUwNGSUjA5yZmNfcmVmZXJlbmNlc5ROjAxyZmNfYmFzZV91cmyUjBtodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC+UjB10cmltX2Zvb3Rub3RlX3JlZmVyZW5jZV9zcGFjZZROjBZmaWxlX2luc2VydGlvbl9lbmFibGVklEsBjAtyYXdfZW5hYmxlZJRLAYwOYXV0b19pZF9wcmVmaXiUjAJpZJSMCWlkX3ByZWZpeJRoBowbc3RyaXBfZWxlbWVudHNfd2l0aF9jbGFzc2VzlE6MDXN0cmlwX2NsYXNzZXOUTnWMBGJvdGiUfZSMCl9vcHRpb25zVG+UjAVfYm90aJSMC19vbGRfc291cmNllIxPL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy8udG94L2RvY3Mvc3RhZ2UwX291dC9hdXRvYXBpL5SMC19uZXdfc291cmNllIwJZG9jL2RpZmZzlGodDgAAah4OAACMFmlnbm9yZV9pbl9zZWN0aW9uX25hbWWUXZQojAl0YW5nZXJpbmWUjAd3aGlzdGxllIwIc3B1cmlvdXOUjAZkcmFnb26UZXVijAhyZXBvcnRlcpROjBBpbmRpcmVjdF90YXJnZXRzlF2UjBFzdWJzdGl0dXRpb25fZGVmc5R9lIwSc3Vic3RpdHV0aW9uX25hbWVzlH2UjAhyZWZuYW1lc5R9lIwGcmVmaWRzlH2UjAduYW1laWRzlH2UjAluYW1ldHlwZXOUfZRoEH2UjA1mb290bm90ZV9yZWZzlH2UjA1jaXRhdGlvbl9yZWZzlH2UjA1hdXRvZm9vdG5vdGVzlF2UjBFhdXRvZm9vdG5vdGVfcmVmc5RdlIwQc3ltYm9sX2Zvb3Rub3Rlc5RdlIwUc3ltYm9sX2Zvb3Rub3RlX3JlZnOUXZSMCWZvb3Rub3Rlc5RdlIwJY2l0YXRpb25zlF2UjBJhdXRvZm9vdG5vdGVfc3RhcnSUSwGMFXN5bWJvbF9mb290bm90ZV9zdGFydJRLAIwKaWRfY291bnRlcpSMC2NvbGxlY3Rpb25zlIwHQ291bnRlcpSTlH2UhZRSlIwOcGFyc2VfbWVzc2FnZXOUXZSMEnRyYW5zZm9ybV9tZXNzYWdlc5RdlIwLdHJhbnNmb3JtZXKUTowLaW5jbHVkZV9sb2eUXZSMCmRlY29yYXRpb26UTmghaAN1Yi4=