From cc072763165a8c2a6034c9dbe74b4d5b6baf310c Mon Sep 17 00:00:00 2001 From: sodium16 Date: Sat, 11 Apr 2026 04:14:08 +0530 Subject: [PATCH] feat1: portfolio and visual expenses --- .../smart_contracts/algomint/contract.py | 8 +- .../algomint/Algomint.approval.puya.map | 1118 +++++++++-------- .../artifacts/algomint/Algomint.approval.teal | 38 +- .../artifacts/algomint/Algomint.arc56.json | 72 +- .../artifacts/algomint/algomint_client.py | 2 +- projects/hackalgo-frontend/src/Home.tsx | 38 +- .../src/hooks/useAlgoMint.ts | 41 +- .../src/pages/PortfolioPage.tsx | 116 ++ 8 files changed, 786 insertions(+), 647 deletions(-) create mode 100644 projects/hackalgo-frontend/src/pages/PortfolioPage.tsx diff --git a/projects/hackalgo-contracts/smart_contracts/algomint/contract.py b/projects/hackalgo-contracts/smart_contracts/algomint/contract.py index dcdc69d..059e9b2 100644 --- a/projects/hackalgo-contracts/smart_contracts/algomint/contract.py +++ b/projects/hackalgo-contracts/smart_contracts/algomint/contract.py @@ -66,7 +66,7 @@ def mint_future_nft( url=b"template-ipfs://{ipfscid:1:raw:reserve:sha2-256}", manager=Global.current_application_address, reserve=Global.current_application_address, - fee=0, + fee=1000, ).submit() if idx == UInt64(0): self.first_asset_id.value = created.created_asset.id @@ -104,12 +104,12 @@ def buy_nft( xfer_asset=asset, asset_receiver=Txn.sender, asset_amount=UInt64(1), - fee=0, + fee=1000, ).submit() itxn.Payment( receiver=self.creator.value, amount=payment.amount, - fee=0, + fee=1000, ).submit() @arc4.abimethod @@ -151,7 +151,7 @@ def claim_payout(self, asset_id: UInt64) -> None: itxn.Payment( amount=self.payout_per_nft.value, receiver=Txn.sender, - fee=0, + fee=1000, ).submit() self.last_claimed_quarter[asset_id] = self.last_reported_quarter.value diff --git a/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.approval.puya.map b/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.approval.puya.map index 3735b3c..3cf4c57 100644 --- a/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.approval.puya.map +++ b/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "../../algomint/contract.py" ], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOQ;AAA8B;AAA9B;AACA;AAAiC;AAAjC;AACA;;AAAkC;AAAlC;AACA;;AAAiC;AAAjC;AACA;;AAA8B;AAA9B;AACA;;AAAkC;AAAlC;AACA;;AAAmC;AAAnC;AACA;AAAyC;AAAzC;AACA;;AAAwC;AAAxC;AACA;;AAAkC;AAAlC;AACA;AAA+B;AAA/B;AAdR;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;AAAA;;;;;;;;;;;AAqBK;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAUc;AAAA;AAAA;AAAA;AAAJ;AAAP;AACA;;AAAA;AACA;;AAAA;AACO;;AAAiB;AAAjB;AAAP;AACA;;AAAA;AACA;;AAAA;AACA;;AAAA;AAEO;AAAA;;AAAsB;;AAAtB;AAAP;AACO;AAAA;;AAAwB;;AAAxB;AAAP;AAEO;;AAAsB;;;;AAAtB;AAAP;AAEA;;AAAqB;;AAArB;AACA;AAAA;;AAAA;AACA;AAAA;;AAAA;AACA;;AAAA;;AAAA;AACA;;AAAA;;AAAA;AACA;;AAAA;AAAA;AAC6B;AAAA;AAAA;AAAA;AAA4B;AAAA;AAAA;AAAA;AAA5B;AAA7B;;AAAA;AAAA;AACA;AAAyB;AAAzB;AAGW;AAAnB;AAAA;;AAAA;AAAA;;;AACsB;AAQE;;AACA;;;;;AAFJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAFM;;;;;;;;;AADC;;;;;;;;;;;;;;;;;;;;;;AADI;;;AADN;;;AADH;;;AADA;;;;AAUF;;;AAVE;;;;;AAYtB;AAAA;;;AACgB;;AAAA;;AAAA;AACe;;AAAA;AAAnB;;AAAA;AAAA;AAA+C;AAA/C;AAAA;AAfO;AAAA;AAAA;;;;;;AAjCd;AAAA;AAkDA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAOU;AAAA;AAAA;AAAA;AAAP;AACA;;AAAA;AAC8B;;AAAA;AAAvB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyC;AAAzC;AAAA;;AAAA;AAAuD;AAAvD;AAAP;AAKO;;AAAA;;AAAiB;;AAAjB;AAAP;AACO;;AAAA;;AAAyB;;AAAzB;AAAP;AACO;;AAAA;;AAAA;;AAAA;AAAP;AACO;AAAA;;AAAA;AAAP;AAEO;AAAA;;AAAkB;;AAAlB;AAAP;AACO;AAAA;;AAAoB;;AAApB;AAAP;AACO;;AAAkB;AAAA;;AAAA;AAAA;AAAlB;;AAAA;AAAP;AAE0D;;AAAjC;;AAAA;;AACzB;AACsB;AAAf;AAAP;AAGA;AAEmB;;AACF;;;;;;;;AAHjB;;;;AAIQ;;;AAJR;AAMA;AACa;AAAA;;AAAA;AAAA;;;;;AADb;;;AAGQ;;;AAHR;AAlCH;AAAA;AAwCA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAIU;AAAA;AAAA;AAAA;AAAP;AACO;;AAAc;AAAA;;AAAA;AAAA;AAAd;AAAP;AACiB;AAAA;AAAA;AAAA;AAAV;;AAAA;AAAP;AACA;;AAAA;AAEgC;AAAA;AAAA;AAAA;AAAhB;;AAAA;AAA6C;AAA9C;AACf;AAAA;AAGO;;AAAA;;AAAyB;;AAAzB;AAAP;AACO;;AAAA;;AAA2B;;AAA3B;AAAP;AACO;AAAA;;AAAA;;AAAA;AAAP;AAEA;AAAA;;AAAA;AACA;;AAAA;;AAAA;AAC4C;AAAA;AAAA;AAAA;AAAhB;AAA5B;;AAAA;AAAA;AAnBH;AAAA;AAqBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEU;AAAA;AAAA;AAAA;AAAP;AACA;AAAA;AAC8B;AAAA;AAAvB;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAyC;AAAzC;AAAA;;AAAA;AAAuD;AAAvD;AAAP;AACO;AAAA;AAAA;AAAA;AAAP;AAAA;AAEgE;;AAAjC;;AAAA;;AAC/B;AACyB;AAAlB;AAAP;AAEU;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgD;AAAhD;AAAA;;AAAA;AACH;;AAAA;AAAP;AACO;AAAA;;AAAA;AAAA;AAAP;AAAA;AAEA;AAEa;;;;;;AAFb;;;AAGQ;;;AAHR;AAMA;AAAA;AAAA;AArBH;AAAA;;;AAuBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAEU;AAAA;AAAA;AAAA;AAAP;AACA;;AAAA;AAC8B;AAAA;AAAA;AAAA;;AAAvB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyC;AAAzC;AAAA;;AAAA;AAAuD;AAAvD;AAAP;AACkB;;AAAX;AAAP;AAEG;AAAA;AAAA;AAAA;AAAX;;;AACmB;AARd;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUkC;;AAAA;;AAAA;;AAAA;AAAA;;AAC5B;;;AACQ;AAZd;;;AAaM;;AAAkB;AAAlB;AAAX;;;AACmB;AAdd;;;AAgBa;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAgD;AAAhD;AAAA;;AAAA;AACG;AAAA;AAAA;AAAA;AAAV;AAAX;;;AACmB;AAAA;;AAAA;AAAA;AAlBd;;;AAmBU;AAnBV;;;;AA4BU;AAAA;AAAA;AAAA;AAAJ;;;AAEK;;AAAA;;AACA;AACA;;AAXX;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBO;AAAA;;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;;;;;AAxBP", + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOQ;AAA8B;AAA9B;AACA;AAAiC;AAAjC;AACA;;AAAkC;AAAlC;AACA;;AAAiC;AAAjC;AACA;;AAA8B;AAA9B;AACA;;AAAkC;AAAlC;AACA;;AAAmC;AAAnC;AACA;AAAyC;AAAzC;AACA;;AAAwC;AAAxC;AACA;;AAAkC;AAAlC;AACA;AAA+B;AAA/B;AAdR;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;AAAA;;;;;;;;;;;AAqBK;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAUc;AAAA;AAAA;AAAA;AAAJ;AAAP;AACA;;AAAA;AACA;;AAAA;AACO;;AAAiB;;;AAAjB;AAAP;AACA;;AAAA;AACA;;AAAA;AACA;;AAAA;AAEO;AAAA;;AAAsB;;AAAtB;AAAP;AACO;AAAA;;AAAwB;;AAAxB;AAAP;AAEO;;AAAsB;;;;AAAtB;AAAP;AAEA;;AAAqB;;AAArB;AACA;AAAA;;AAAA;AACA;AAAA;;AAAA;AACA;;AAAA;;AAAA;AACA;;AAAA;;AAAA;AACA;;AAAA;AAAA;AAC6B;AAAA;AAAA;AAAA;AAA4B;AAAA;AAAA;AAAA;AAA5B;AAA7B;;AAAA;AAAA;AACA;AAAyB;AAAzB;AAGW;AAAnB;AAAA;;AAAA;AAAA;;;AACsB;AAQE;;AACA;;;;;AAFJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAFM;;;;;;;;;AADC;;;;;;;;;;;;;;;;;;;;;;AADI;;;AADN;;;AADH;;;AADA;;;;AAUF;;;AAVE;;;;;AAYtB;AAAA;;;AACgB;;AAAA;;AAAA;AACe;;AAAA;AAAnB;;AAAA;AAAA;AAA+C;AAA/C;AAAA;AAfO;AAAA;AAAA;;;;;;AAjCd;AAAA;AAkDA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAOU;AAAA;AAAA;AAAA;AAAP;AACA;;AAAA;AAC8B;;AAAA;AAAvB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyC;AAAzC;AAAA;;AAAA;AAAuD;AAAvD;AAAP;AAKO;;AAAA;;AAAiB;;AAAjB;AAAP;AACO;;AAAA;;AAAyB;;AAAzB;AAAP;AACO;;AAAA;;AAAA;;AAAA;AAAP;AACO;AAAA;;AAAA;AAAP;AAEO;AAAA;;AAAkB;;AAAlB;AAAP;AACO;AAAA;;AAAoB;;AAApB;AAAP;AACO;;AAAkB;AAAA;;AAAA;AAAA;AAAlB;;AAAA;AAAP;AAE0D;;AAAjC;;AAAA;;AACzB;AACsB;AAAf;AAAP;AAGA;AAEmB;;AACF;;;;;;;;AAHjB;;;;AAIQ;;;AAJR;AAMA;AACa;AAAA;;AAAA;AAAA;;;;;AADb;;;AAGQ;;;AAHR;AAlCH;AAAA;AAwCA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAIU;AAAA;AAAA;AAAA;AAAP;AACO;;AAAc;AAAA;;AAAA;AAAA;AAAd;AAAP;AACiB;AAAA;AAAA;AAAA;AAAV;;AAAA;AAAP;AACA;;AAAA;AAEgC;AAAA;AAAA;AAAA;AAAhB;;AAAA;AAA6C;;;AAA9C;AACf;AAAA;AAGO;;AAAA;;AAAyB;;AAAzB;AAAP;AACO;;AAAA;;AAA2B;;AAA3B;AAAP;AACO;AAAA;;AAAA;;AAAA;AAAP;AAEA;AAAA;;AAAA;AACA;;AAAA;;AAAA;AAC4C;AAAA;AAAA;AAAA;AAAhB;AAA5B;;AAAA;AAAA;AAnBH;AAAA;AAqBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEU;AAAA;AAAA;AAAA;AAAP;AACA;AAAA;AAC8B;AAAA;AAAvB;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAyC;AAAzC;AAAA;;AAAA;AAAuD;AAAvD;AAAP;AACO;AAAA;AAAA;AAAA;AAAP;AAAA;AAEgE;;AAAjC;;AAAA;;AAC/B;AACyB;AAAlB;AAAP;AAEU;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgD;AAAhD;AAAA;;AAAA;AACH;;AAAA;AAAP;AACO;AAAA;;AAAA;AAAA;AAAP;AAAA;AAEA;AAEa;;;;;;AAFb;;;AAGQ;;;AAHR;AAMA;AAAA;AAAA;AArBH;AAAA;;;AAuBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAEU;AAAA;AAAA;AAAA;AAAP;AACA;;AAAA;AAC8B;AAAA;AAAA;AAAA;;AAAvB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyC;AAAzC;AAAA;;AAAA;AAAuD;AAAvD;AAAP;AACkB;;AAAX;AAAP;AAEG;AAAA;AAAA;AAAA;AAAX;;;AACmB;AARd;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUkC;;AAAA;;AAAA;;AAAA;AAAA;;AAC5B;;;AACQ;AAZd;;;AAaM;;AAAkB;AAAlB;AAAX;;;AACmB;AAdd;;;AAgBa;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAgD;AAAhD;AAAA;;AAAA;AACG;AAAA;AAAA;AAAA;AAAV;AAAX;;;AACmB;AAAA;;AAAA;AAAA;AAlBd;;;AAmBU;AAnBV;;;;AA4BU;AAAA;AAAA;AAAA;AAAJ;;;AAEK;;AAAA;;AACA;AACA;;AAXX;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBO;AAAA;;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;AACA;AAAA;;AAAA;AAAA;;;;;AAxBP", "op_pc_offset": 0, "pc_events": { "1": { @@ -11,7 +11,7 @@ "params": {}, "block": "main", "stack_in": [], - "op": "intcblock 0 1 8 10000" + "op": "intcblock 0 1 8 1000" }, "8": { "op": "bytecblock \"initialized\" \"last_reported_quarter\" \"total_nfts\" \"total_pct_bps\" \"sale_price\" \"payout_per_nft\" \"creator\" \"ma_\" \"duration_years\" \"start_quarter\" \"first_asset_id\" \"pct_per_nft_bps\" \"last_reported_income\" \"lc_\" 0x151f7c75" @@ -1320,7 +1320,7 @@ ] }, "384": { - "op": "intc_3 // 10000", + "op": "pushint 10000", "defined_out": [ "10000", "duration_years#0", @@ -1344,7 +1344,7 @@ "10000" ] }, - "385": { + "387": { "op": "<=", "defined_out": [ "duration_years#0", @@ -1367,7 +1367,7 @@ "tmp%3#1" ] }, - "386": { + "388": { "op": "assert", "stack_out": [ "created.CreatedAssetID#0", @@ -1380,7 +1380,7 @@ "mbr_payment#0" ] }, - "387": { + "389": { "op": "dig 3", "defined_out": [ "duration_years#0", @@ -1403,7 +1403,7 @@ "duration_years#0 (copy)" ] }, - "389": { + "391": { "op": "assert", "stack_out": [ "created.CreatedAssetID#0", @@ -1416,7 +1416,7 @@ "mbr_payment#0" ] }, - "390": { + "392": { "op": "dig 2", "defined_out": [ "duration_years#0", @@ -1439,7 +1439,7 @@ "start_quarter#0 (copy)" ] }, - "392": { + "394": { "op": "assert", "stack_out": [ "created.CreatedAssetID#0", @@ -1452,7 +1452,7 @@ "mbr_payment#0" ] }, - "393": { + "395": { "op": "dig 1", "defined_out": [ "duration_years#0", @@ -1475,7 +1475,7 @@ "sale_price#0 (copy)" ] }, - "395": { + "397": { "op": "assert", "stack_out": [ "created.CreatedAssetID#0", @@ -1488,7 +1488,7 @@ "mbr_payment#0" ] }, - "396": { + "398": { "op": "dup", "stack_out": [ "created.CreatedAssetID#0", @@ -1502,7 +1502,7 @@ "mbr_payment#0 (copy)" ] }, - "397": { + "399": { "op": "gtxns Sender", "defined_out": [ "duration_years#0", @@ -1525,7 +1525,7 @@ "tmp%7#1" ] }, - "399": { + "401": { "op": "txn Sender", "defined_out": [ "duration_years#0", @@ -1550,7 +1550,7 @@ "tmp%8#1" ] }, - "401": { + "403": { "op": "==", "defined_out": [ "duration_years#0", @@ -1573,7 +1573,7 @@ "tmp%9#1" ] }, - "402": { + "404": { "op": "assert", "stack_out": [ "created.CreatedAssetID#0", @@ -1586,7 +1586,7 @@ "mbr_payment#0" ] }, - "403": { + "405": { "op": "dup", "stack_out": [ "created.CreatedAssetID#0", @@ -1600,7 +1600,7 @@ "mbr_payment#0 (copy)" ] }, - "404": { + "406": { "op": "gtxns Receiver", "defined_out": [ "duration_years#0", @@ -1623,7 +1623,7 @@ "tmp%10#1" ] }, - "406": { + "408": { "op": "global CurrentApplicationAddress", "defined_out": [ "duration_years#0", @@ -1648,7 +1648,7 @@ "tmp%11#0" ] }, - "408": { + "410": { "op": "==", "defined_out": [ "duration_years#0", @@ -1671,7 +1671,7 @@ "tmp%12#0" ] }, - "409": { + "411": { "op": "assert", "stack_out": [ "created.CreatedAssetID#0", @@ -1684,7 +1684,7 @@ "mbr_payment#0" ] }, - "410": { + "412": { "op": "gtxns Amount", "defined_out": [ "duration_years#0", @@ -1705,7 +1705,7 @@ "tmp%13#0" ] }, - "412": { + "414": { "op": "pushint 1000000", "defined_out": [ "1000000", @@ -1728,7 +1728,7 @@ "1000000" ] }, - "416": { + "418": { "op": ">=", "defined_out": [ "duration_years#0", @@ -1749,7 +1749,7 @@ "tmp%14#0" ] }, - "417": { + "419": { "op": "assert", "stack_out": [ "created.CreatedAssetID#0", @@ -1761,7 +1761,7 @@ "sale_price#0" ] }, - "418": { + "420": { "op": "bytec 6 // \"creator\"", "defined_out": [ "\"creator\"", @@ -1782,7 +1782,7 @@ "\"creator\"" ] }, - "420": { + "422": { "op": "txn Sender", "defined_out": [ "\"creator\"", @@ -1805,7 +1805,7 @@ "tmp%15#0" ] }, - "422": { + "424": { "op": "app_global_put", "stack_out": [ "created.CreatedAssetID#0", @@ -1817,7 +1817,7 @@ "sale_price#0" ] }, - "423": { + "425": { "op": "bytec_2 // \"total_nfts\"", "defined_out": [ "\"total_nfts\"", @@ -1838,7 +1838,7 @@ "\"total_nfts\"" ] }, - "424": { + "426": { "op": "uncover 5", "stack_out": [ "created.CreatedAssetID#0", @@ -1851,7 +1851,7 @@ "total_nfts#0" ] }, - "426": { + "428": { "op": "app_global_put", "stack_out": [ "created.CreatedAssetID#0", @@ -1862,7 +1862,7 @@ "sale_price#0" ] }, - "427": { + "429": { "op": "bytec_3 // \"total_pct_bps\"", "defined_out": [ "\"total_pct_bps\"", @@ -1882,7 +1882,7 @@ "\"total_pct_bps\"" ] }, - "428": { + "430": { "op": "uncover 4", "stack_out": [ "created.CreatedAssetID#0", @@ -1894,7 +1894,7 @@ "total_pct_bps#0" ] }, - "430": { + "432": { "op": "app_global_put", "stack_out": [ "created.CreatedAssetID#0", @@ -1904,7 +1904,7 @@ "sale_price#0" ] }, - "431": { + "433": { "op": "bytec 8 // \"duration_years\"", "defined_out": [ "\"duration_years\"", @@ -1922,7 +1922,7 @@ "\"duration_years\"" ] }, - "433": { + "435": { "op": "uncover 3", "stack_out": [ "created.CreatedAssetID#0", @@ -1933,7 +1933,7 @@ "duration_years#0" ] }, - "435": { + "437": { "op": "app_global_put", "stack_out": [ "created.CreatedAssetID#0", @@ -1942,7 +1942,7 @@ "sale_price#0" ] }, - "436": { + "438": { "op": "bytec 9 // \"start_quarter\"", "defined_out": [ "\"start_quarter\"", @@ -1958,7 +1958,7 @@ "\"start_quarter\"" ] }, - "438": { + "440": { "op": "uncover 2", "stack_out": [ "created.CreatedAssetID#0", @@ -1968,7 +1968,7 @@ "start_quarter#0" ] }, - "440": { + "442": { "op": "app_global_put", "stack_out": [ "created.CreatedAssetID#0", @@ -1976,7 +1976,7 @@ "sale_price#0" ] }, - "441": { + "443": { "op": "bytec 4 // \"sale_price\"", "defined_out": [ "\"sale_price\"", @@ -1990,7 +1990,7 @@ "\"sale_price\"" ] }, - "443": { + "445": { "op": "swap", "stack_out": [ "created.CreatedAssetID#0", @@ -1999,14 +1999,14 @@ "sale_price#0" ] }, - "444": { + "446": { "op": "app_global_put", "stack_out": [ "created.CreatedAssetID#0", "total_nfts#0" ] }, - "445": { + "447": { "op": "intc_0 // 0", "stack_out": [ "created.CreatedAssetID#0", @@ -2014,7 +2014,7 @@ "0" ] }, - "446": { + "448": { "op": "bytec_3 // \"total_pct_bps\"", "stack_out": [ "created.CreatedAssetID#0", @@ -2023,7 +2023,7 @@ "\"total_pct_bps\"" ] }, - "447": { + "449": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%1#0", @@ -2037,7 +2037,7 @@ "maybe_exists%1#0" ] }, - "448": { + "450": { "error": "check self.total_pct_bps exists", "op": "assert // check self.total_pct_bps exists", "stack_out": [ @@ -2046,7 +2046,7 @@ "maybe_value%1#0" ] }, - "449": { + "451": { "op": "intc_0 // 0", "stack_out": [ "created.CreatedAssetID#0", @@ -2055,7 +2055,7 @@ "0" ] }, - "450": { + "452": { "op": "bytec_2 // \"total_nfts\"", "stack_out": [ "created.CreatedAssetID#0", @@ -2065,7 +2065,7 @@ "\"total_nfts\"" ] }, - "451": { + "453": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%2#0", @@ -2081,7 +2081,7 @@ "maybe_exists%2#0" ] }, - "452": { + "454": { "error": "check self.total_nfts exists", "op": "assert // check self.total_nfts exists", "stack_out": [ @@ -2091,7 +2091,7 @@ "maybe_value%2#0" ] }, - "453": { + "455": { "op": "/", "defined_out": [ "tmp%16#0", @@ -2103,7 +2103,7 @@ "tmp%16#0" ] }, - "454": { + "456": { "op": "bytec 11 // \"pct_per_nft_bps\"", "defined_out": [ "\"pct_per_nft_bps\"", @@ -2117,7 +2117,7 @@ "\"pct_per_nft_bps\"" ] }, - "456": { + "458": { "op": "swap", "stack_out": [ "created.CreatedAssetID#0", @@ -2126,14 +2126,14 @@ "tmp%16#0" ] }, - "457": { + "459": { "op": "app_global_put", "stack_out": [ "created.CreatedAssetID#0", "total_nfts#0" ] }, - "458": { + "460": { "op": "bytec_0 // \"initialized\"", "stack_out": [ "created.CreatedAssetID#0", @@ -2141,7 +2141,7 @@ "\"initialized\"" ] }, - "459": { + "461": { "op": "intc_1 // 1", "stack_out": [ "created.CreatedAssetID#0", @@ -2150,14 +2150,14 @@ "1" ] }, - "460": { + "462": { "op": "app_global_put", "stack_out": [ "created.CreatedAssetID#0", "total_nfts#0" ] }, - "461": { + "463": { "op": "intc_0 // 0", "defined_out": [ "idx#0", @@ -2169,7 +2169,7 @@ "idx#0" ] }, - "462": { + "464": { "block": "mint_future_nft_for_header@2", "stack_in": [ "created.CreatedAssetID#0", @@ -2187,7 +2187,7 @@ "idx#0" ] }, - "463": { + "465": { "op": "dig 2", "defined_out": [ "idx#0", @@ -2201,7 +2201,7 @@ "total_nfts#0" ] }, - "465": { + "467": { "op": "<", "defined_out": [ "continue_looping%0#0", @@ -2215,7 +2215,7 @@ "continue_looping%0#0" ] }, - "466": { + "468": { "op": "bz mint_future_nft_after_for@8", "stack_out": [ "created.CreatedAssetID#0", @@ -2223,10 +2223,10 @@ "idx#0" ] }, - "469": { + "471": { "op": "itxn_begin" }, - "470": { + "472": { "op": "global CurrentApplicationAddress", "defined_out": [ "idx#0", @@ -2240,7 +2240,7 @@ "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0" ] }, - "472": { + "474": { "op": "dup", "defined_out": [ "idx#0", @@ -2256,7 +2256,7 @@ "inner_txn_params%0%%param_ConfigAssetReserve_idx_0#0" ] }, - "473": { + "475": { "op": "itxn_field ConfigAssetReserve", "stack_out": [ "created.CreatedAssetID#0", @@ -2265,7 +2265,7 @@ "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0" ] }, - "475": { + "477": { "op": "itxn_field ConfigAssetManager", "stack_out": [ "created.CreatedAssetID#0", @@ -2273,7 +2273,7 @@ "idx#0" ] }, - "477": { + "479": { "op": "pushbytes 0x74656d706c6174652d697066733a2f2f7b697066736369643a313a7261773a726573657276653a736861322d3235367d", "defined_out": [ "0x74656d706c6174652d697066733a2f2f7b697066736369643a313a7261773a726573657276653a736861322d3235367d", @@ -2287,7 +2287,7 @@ "0x74656d706c6174652d697066733a2f2f7b697066736369643a313a7261773a726573657276653a736861322d3235367d" ] }, - "527": { + "529": { "op": "itxn_field ConfigAssetURL", "stack_out": [ "created.CreatedAssetID#0", @@ -2295,7 +2295,7 @@ "idx#0" ] }, - "529": { + "531": { "op": "pushbytes 0x46454e4654", "defined_out": [ "0x46454e4654", @@ -2309,7 +2309,7 @@ "0x46454e4654" ] }, - "536": { + "538": { "op": "itxn_field ConfigAssetUnitName", "stack_out": [ "created.CreatedAssetID#0", @@ -2317,7 +2317,7 @@ "idx#0" ] }, - "538": { + "540": { "op": "pushbytes 0x467574757265204561726e696e67204e4654", "defined_out": [ "0x467574757265204561726e696e67204e4654", @@ -2331,7 +2331,7 @@ "0x467574757265204561726e696e67204e4654" ] }, - "558": { + "560": { "op": "itxn_field ConfigAssetName", "stack_out": [ "created.CreatedAssetID#0", @@ -2339,7 +2339,7 @@ "idx#0" ] }, - "560": { + "562": { "op": "intc_0 // 0", "defined_out": [ "0", @@ -2353,7 +2353,7 @@ "0" ] }, - "561": { + "563": { "op": "itxn_field ConfigAssetDefaultFrozen", "stack_out": [ "created.CreatedAssetID#0", @@ -2361,7 +2361,7 @@ "idx#0" ] }, - "563": { + "565": { "op": "intc_0 // 0", "stack_out": [ "created.CreatedAssetID#0", @@ -2370,7 +2370,7 @@ "0" ] }, - "564": { + "566": { "op": "itxn_field ConfigAssetDecimals", "stack_out": [ "created.CreatedAssetID#0", @@ -2378,7 +2378,7 @@ "idx#0" ] }, - "566": { + "568": { "op": "intc_1 // 1", "defined_out": [ "1", @@ -2392,7 +2392,7 @@ "1" ] }, - "567": { + "569": { "op": "itxn_field ConfigAssetTotal", "stack_out": [ "created.CreatedAssetID#0", @@ -2400,7 +2400,7 @@ "idx#0" ] }, - "569": { + "571": { "op": "pushint 3 // acfg", "defined_out": [ "acfg", @@ -2414,7 +2414,7 @@ "acfg" ] }, - "571": { + "573": { "op": "itxn_field TypeEnum", "stack_out": [ "created.CreatedAssetID#0", @@ -2422,16 +2422,21 @@ "idx#0" ] }, - "573": { - "op": "intc_0 // 0", + "575": { + "op": "intc_3 // 1000", + "defined_out": [ + "1000", + "idx#0", + "total_nfts#0" + ], "stack_out": [ "created.CreatedAssetID#0", "total_nfts#0", "idx#0", - "0" + "1000" ] }, - "574": { + "576": { "op": "itxn_field Fee", "stack_out": [ "created.CreatedAssetID#0", @@ -2439,10 +2444,10 @@ "idx#0" ] }, - "576": { + "578": { "op": "itxn_submit" }, - "577": { + "579": { "op": "itxn CreatedAssetID", "defined_out": [ "created.CreatedAssetID#0", @@ -2456,7 +2461,7 @@ "created.CreatedAssetID#0" ] }, - "579": { + "581": { "op": "bury 3", "defined_out": [ "created.CreatedAssetID#0", @@ -2469,7 +2474,7 @@ "idx#0" ] }, - "581": { + "583": { "op": "dup", "stack_out": [ "created.CreatedAssetID#0", @@ -2478,7 +2483,7 @@ "idx#0" ] }, - "582": { + "584": { "op": "bnz mint_future_nft_after_if_else@6", "stack_out": [ "created.CreatedAssetID#0", @@ -2486,7 +2491,7 @@ "idx#0" ] }, - "585": { + "587": { "op": "bytec 10 // \"first_asset_id\"", "defined_out": [ "\"first_asset_id\"", @@ -2501,7 +2506,7 @@ "\"first_asset_id\"" ] }, - "587": { + "589": { "op": "dig 3", "stack_out": [ "created.CreatedAssetID#0", @@ -2511,7 +2516,7 @@ "created.CreatedAssetID#0" ] }, - "589": { + "591": { "op": "app_global_put", "stack_out": [ "created.CreatedAssetID#0", @@ -2519,7 +2524,7 @@ "idx#0" ] }, - "590": { + "592": { "block": "mint_future_nft_after_if_else@6", "stack_in": [ "created.CreatedAssetID#0", @@ -2537,7 +2542,7 @@ "created.CreatedAssetID#0" ] }, - "592": { + "594": { "op": "itob", "defined_out": [ "created.CreatedAssetID#0", @@ -2550,7 +2555,7 @@ "encoded_value%0#0" ] }, - "593": { + "595": { "op": "bytec 7 // \"ma_\"", "defined_out": [ "\"ma_\"", @@ -2565,7 +2570,7 @@ "\"ma_\"" ] }, - "595": { + "597": { "op": "swap", "stack_out": [ "created.CreatedAssetID#0", @@ -2575,7 +2580,7 @@ "encoded_value%0#0" ] }, - "596": { + "598": { "op": "concat", "defined_out": [ "created.CreatedAssetID#0", @@ -2588,7 +2593,7 @@ "map_prefixed_key%0#0" ] }, - "597": { + "599": { "op": "intc_1 // 1", "defined_out": [ "1", @@ -2603,7 +2608,7 @@ "1" ] }, - "598": { + "600": { "op": "itob", "defined_out": [ "created.CreatedAssetID#0", @@ -2618,7 +2623,7 @@ "encoded_value%1#0" ] }, - "599": { + "601": { "op": "box_put", "stack_out": [ "created.CreatedAssetID#0", @@ -2626,7 +2631,7 @@ "idx#0" ] }, - "600": { + "602": { "op": "dup", "defined_out": [ "created.CreatedAssetID#0", @@ -2639,7 +2644,7 @@ "idx#0" ] }, - "601": { + "603": { "op": "intc_1 // 1", "stack_out": [ "created.CreatedAssetID#0", @@ -2649,7 +2654,7 @@ "1" ] }, - "602": { + "604": { "op": "+", "stack_out": [ "created.CreatedAssetID#0", @@ -2658,7 +2663,7 @@ "idx#0" ] }, - "603": { + "605": { "op": "bury 1", "defined_out": [ "created.CreatedAssetID#0", @@ -2670,10 +2675,10 @@ "idx#0" ] }, - "605": { + "607": { "op": "b mint_future_nft_for_header@2" }, - "608": { + "610": { "block": "mint_future_nft_after_for@8", "stack_in": [ "created.CreatedAssetID#0", @@ -2691,7 +2696,7 @@ "1" ] }, - "609": { + "611": { "op": "return", "stack_out": [ "created.CreatedAssetID#0", @@ -2699,7 +2704,7 @@ "idx#0" ] }, - "610": { + "612": { "subroutine": "smart_contracts.algomint.contract.Algomint.buy_nft[routing]", "params": {}, "block": "buy_nft", @@ -2712,7 +2717,7 @@ "tmp%0#0" ] }, - "613": { + "615": { "op": "dup", "defined_out": [ "tmp%0#0", @@ -2723,7 +2728,7 @@ "tmp%0#0 (copy)" ] }, - "614": { + "616": { "op": "len", "defined_out": [ "len%0#0", @@ -2734,7 +2739,7 @@ "len%0#0" ] }, - "615": { + "617": { "op": "intc_2 // 8", "defined_out": [ "8", @@ -2747,7 +2752,7 @@ "8" ] }, - "616": { + "618": { "op": "==", "defined_out": [ "eq%0#0", @@ -2758,14 +2763,14 @@ "eq%0#0" ] }, - "617": { + "619": { "error": "invalid number of bytes for arc4.uint64", "op": "assert // invalid number of bytes for arc4.uint64", "stack_out": [ "tmp%0#0" ] }, - "618": { + "620": { "op": "btoi", "defined_out": [ "asset_id#0" @@ -2774,7 +2779,7 @@ "asset_id#0" ] }, - "619": { + "621": { "op": "txn GroupIndex", "defined_out": [ "asset_id#0", @@ -2785,7 +2790,7 @@ "tmp%2#0" ] }, - "621": { + "623": { "op": "pushint 2", "defined_out": [ "2", @@ -2798,7 +2803,7 @@ "2" ] }, - "623": { + "625": { "op": "-", "defined_out": [ "asset_id#0", @@ -2809,7 +2814,7 @@ "opt_in#0" ] }, - "624": { + "626": { "op": "dup", "defined_out": [ "asset_id#0", @@ -2822,7 +2827,7 @@ "opt_in#0 (copy)" ] }, - "625": { + "627": { "op": "gtxns TypeEnum", "defined_out": [ "asset_id#0", @@ -2835,7 +2840,7 @@ "gtxn_type%0#0" ] }, - "627": { + "629": { "op": "pushint 4 // axfer", "defined_out": [ "asset_id#0", @@ -2850,7 +2855,7 @@ "axfer" ] }, - "629": { + "631": { "op": "==", "defined_out": [ "asset_id#0", @@ -2863,7 +2868,7 @@ "gtxn_type_matches%0#0" ] }, - "630": { + "632": { "error": "transaction type is axfer", "op": "assert // transaction type is axfer", "stack_out": [ @@ -2871,7 +2876,7 @@ "opt_in#0" ] }, - "631": { + "633": { "op": "txn GroupIndex", "defined_out": [ "asset_id#0", @@ -2884,7 +2889,7 @@ "tmp%3#0" ] }, - "633": { + "635": { "op": "intc_1 // 1", "defined_out": [ "1", @@ -2899,7 +2904,7 @@ "1" ] }, - "634": { + "636": { "op": "-", "defined_out": [ "asset_id#0", @@ -2912,7 +2917,7 @@ "payment#0" ] }, - "635": { + "637": { "op": "dup", "defined_out": [ "asset_id#0", @@ -2927,7 +2932,7 @@ "payment#0 (copy)" ] }, - "636": { + "638": { "op": "gtxns TypeEnum", "defined_out": [ "asset_id#0", @@ -2942,7 +2947,7 @@ "gtxn_type%1#0" ] }, - "638": { + "640": { "op": "intc_1 // pay", "defined_out": [ "asset_id#0", @@ -2959,7 +2964,7 @@ "pay" ] }, - "639": { + "641": { "op": "==", "defined_out": [ "asset_id#0", @@ -2974,7 +2979,7 @@ "gtxn_type_matches%1#0" ] }, - "640": { + "642": { "error": "transaction type is pay", "op": "assert // transaction type is pay", "stack_out": [ @@ -2983,7 +2988,7 @@ "payment#0" ] }, - "641": { + "643": { "op": "intc_0 // 0", "defined_out": [ "0", @@ -2998,7 +3003,7 @@ "0" ] }, - "642": { + "644": { "op": "bytec_0 // \"initialized\"", "defined_out": [ "\"initialized\"", @@ -3015,7 +3020,7 @@ "\"initialized\"" ] }, - "643": { + "645": { "op": "app_global_get_ex", "defined_out": [ "asset_id#0", @@ -3032,7 +3037,7 @@ "maybe_exists%0#0" ] }, - "644": { + "646": { "error": "check self.initialized exists", "op": "assert // check self.initialized exists", "stack_out": [ @@ -3042,7 +3047,7 @@ "maybe_value%0#0" ] }, - "645": { + "647": { "op": "assert", "stack_out": [ "asset_id#0", @@ -3050,7 +3055,7 @@ "payment#0" ] }, - "646": { + "648": { "op": "dig 2", "defined_out": [ "asset_id#0", @@ -3065,7 +3070,7 @@ "asset_id#0 (copy)" ] }, - "648": { + "650": { "op": "assert", "stack_out": [ "asset_id#0", @@ -3073,7 +3078,7 @@ "payment#0" ] }, - "649": { + "651": { "op": "dig 2", "stack_out": [ "asset_id#0", @@ -3082,7 +3087,7 @@ "asset_id#0 (copy)" ] }, - "651": { + "653": { "op": "itob", "defined_out": [ "asset_id#0", @@ -3097,7 +3102,7 @@ "encoded_value%0#0" ] }, - "652": { + "654": { "op": "bytec 7 // \"ma_\"", "defined_out": [ "\"ma_\"", @@ -3114,7 +3119,7 @@ "\"ma_\"" ] }, - "654": { + "656": { "op": "swap", "stack_out": [ "asset_id#0", @@ -3124,7 +3129,7 @@ "encoded_value%0#0" ] }, - "655": { + "657": { "op": "concat", "defined_out": [ "asset_id#0", @@ -3139,7 +3144,7 @@ "map_prefixed_key%0#0" ] }, - "656": { + "658": { "op": "box_get", "defined_out": [ "asset_id#0", @@ -3156,7 +3161,7 @@ "maybe_exists%1#0" ] }, - "657": { + "659": { "op": "swap", "stack_out": [ "asset_id#0", @@ -3166,7 +3171,7 @@ "maybe_value%1#0" ] }, - "658": { + "660": { "op": "btoi", "defined_out": [ "asset_id#0", @@ -3183,7 +3188,7 @@ "maybe_value_converted%0#0" ] }, - "659": { + "661": { "op": "intc_0 // 0", "stack_out": [ "asset_id#0", @@ -3194,7 +3199,7 @@ "0" ] }, - "660": { + "662": { "op": "swap", "stack_out": [ "asset_id#0", @@ -3205,7 +3210,7 @@ "maybe_value_converted%0#0" ] }, - "661": { + "663": { "op": "uncover 2", "stack_out": [ "asset_id#0", @@ -3216,7 +3221,7 @@ "maybe_exists%1#0" ] }, - "663": { + "665": { "op": "select", "defined_out": [ "asset_id#0", @@ -3231,7 +3236,7 @@ "state_get%0#0" ] }, - "664": { + "666": { "op": "intc_1 // 1", "stack_out": [ "asset_id#0", @@ -3241,7 +3246,7 @@ "1" ] }, - "665": { + "667": { "op": "==", "defined_out": [ "asset_id#0", @@ -3256,7 +3261,7 @@ "tmp%1#1" ] }, - "666": { + "668": { "op": "assert", "stack_out": [ "asset_id#0", @@ -3264,7 +3269,7 @@ "payment#0" ] }, - "667": { + "669": { "op": "dig 1", "stack_out": [ "asset_id#0", @@ -3273,7 +3278,7 @@ "opt_in#0 (copy)" ] }, - "669": { + "671": { "op": "gtxns Sender", "defined_out": [ "asset_id#0", @@ -3288,7 +3293,7 @@ "tmp%2#1" ] }, - "671": { + "673": { "op": "txn Sender", "defined_out": [ "asset_id#0", @@ -3305,7 +3310,7 @@ "tmp%3#1" ] }, - "673": { + "675": { "op": "==", "defined_out": [ "asset_id#0", @@ -3320,7 +3325,7 @@ "tmp%4#0" ] }, - "674": { + "676": { "op": "assert", "stack_out": [ "asset_id#0", @@ -3328,7 +3333,7 @@ "payment#0" ] }, - "675": { + "677": { "op": "dig 1", "stack_out": [ "asset_id#0", @@ -3337,7 +3342,7 @@ "opt_in#0 (copy)" ] }, - "677": { + "679": { "op": "gtxns AssetReceiver", "defined_out": [ "asset_id#0", @@ -3352,7 +3357,7 @@ "tmp%5#0" ] }, - "679": { + "681": { "op": "txn Sender", "defined_out": [ "asset_id#0", @@ -3369,7 +3374,7 @@ "tmp%6#0" ] }, - "681": { + "683": { "op": "==", "defined_out": [ "asset_id#0", @@ -3384,7 +3389,7 @@ "tmp%7#0" ] }, - "682": { + "684": { "op": "assert", "stack_out": [ "asset_id#0", @@ -3392,7 +3397,7 @@ "payment#0" ] }, - "683": { + "685": { "op": "dig 1", "stack_out": [ "asset_id#0", @@ -3401,7 +3406,7 @@ "opt_in#0 (copy)" ] }, - "685": { + "687": { "op": "gtxns XferAsset", "defined_out": [ "asset_id#0", @@ -3416,7 +3421,7 @@ "tmp%8#0" ] }, - "687": { + "689": { "op": "dig 3", "stack_out": [ "asset_id#0", @@ -3426,7 +3431,7 @@ "asset_id#0 (copy)" ] }, - "689": { + "691": { "op": "==", "defined_out": [ "asset_id#0", @@ -3441,7 +3446,7 @@ "tmp%9#0" ] }, - "690": { + "692": { "op": "assert", "stack_out": [ "asset_id#0", @@ -3449,7 +3454,7 @@ "payment#0" ] }, - "691": { + "693": { "op": "swap", "stack_out": [ "asset_id#0", @@ -3457,7 +3462,7 @@ "opt_in#0" ] }, - "692": { + "694": { "op": "gtxns AssetAmount", "defined_out": [ "asset_id#0", @@ -3470,7 +3475,7 @@ "tmp%10#0" ] }, - "694": { + "696": { "op": "!", "defined_out": [ "asset_id#0", @@ -3483,14 +3488,14 @@ "tmp%11#0" ] }, - "695": { + "697": { "op": "assert", "stack_out": [ "asset_id#0", "payment#0" ] }, - "696": { + "698": { "op": "dup", "stack_out": [ "asset_id#0", @@ -3498,7 +3503,7 @@ "payment#0 (copy)" ] }, - "697": { + "699": { "op": "gtxns Sender", "defined_out": [ "asset_id#0", @@ -3511,7 +3516,7 @@ "tmp%12#0" ] }, - "699": { + "701": { "op": "txn Sender", "defined_out": [ "asset_id#0", @@ -3526,7 +3531,7 @@ "tmp%13#0" ] }, - "701": { + "703": { "op": "==", "defined_out": [ "asset_id#0", @@ -3539,14 +3544,14 @@ "tmp%14#0" ] }, - "702": { + "704": { "op": "assert", "stack_out": [ "asset_id#0", "payment#0" ] }, - "703": { + "705": { "op": "dup", "stack_out": [ "asset_id#0", @@ -3554,7 +3559,7 @@ "payment#0 (copy)" ] }, - "704": { + "706": { "op": "gtxns Receiver", "defined_out": [ "asset_id#0", @@ -3567,7 +3572,7 @@ "tmp%15#0" ] }, - "706": { + "708": { "op": "global CurrentApplicationAddress", "defined_out": [ "asset_id#0", @@ -3582,7 +3587,7 @@ "tmp%16#0" ] }, - "708": { + "710": { "op": "==", "defined_out": [ "asset_id#0", @@ -3595,14 +3600,14 @@ "tmp%17#0" ] }, - "709": { + "711": { "op": "assert", "stack_out": [ "asset_id#0", "payment#0" ] }, - "710": { + "712": { "op": "gtxns Amount", "defined_out": [ "asset_id#0", @@ -3613,7 +3618,7 @@ "tmp%18#0" ] }, - "712": { + "714": { "op": "intc_0 // 0", "stack_out": [ "asset_id#0", @@ -3621,7 +3626,7 @@ "0" ] }, - "713": { + "715": { "op": "bytec 4 // \"sale_price\"", "defined_out": [ "\"sale_price\"", @@ -3636,7 +3641,7 @@ "\"sale_price\"" ] }, - "715": { + "717": { "op": "app_global_get_ex", "defined_out": [ "asset_id#0", @@ -3651,7 +3656,7 @@ "maybe_exists%2#0" ] }, - "716": { + "718": { "error": "check self.sale_price exists", "op": "assert // check self.sale_price exists", "stack_out": [ @@ -3660,7 +3665,7 @@ "maybe_value%2#0" ] }, - "717": { + "719": { "op": "dig 1", "defined_out": [ "asset_id#0", @@ -3675,7 +3680,7 @@ "tmp%18#0 (copy)" ] }, - "719": { + "721": { "op": "==", "defined_out": [ "asset_id#0", @@ -3688,14 +3693,14 @@ "tmp%19#0" ] }, - "720": { + "722": { "op": "assert", "stack_out": [ "asset_id#0", "tmp%18#0" ] }, - "721": { + "723": { "op": "global CurrentApplicationAddress", "defined_out": [ "asset_id#0", @@ -3708,7 +3713,7 @@ "tmp%20#0" ] }, - "723": { + "725": { "op": "dig 2", "stack_out": [ "asset_id#0", @@ -3717,7 +3722,7 @@ "asset_id#0 (copy)" ] }, - "725": { + "727": { "op": "asset_holding_get AssetBalance", "defined_out": [ "app_balance#0", @@ -3732,7 +3737,7 @@ "app_opted#0" ] }, - "727": { + "729": { "op": "assert", "stack_out": [ "asset_id#0", @@ -3740,7 +3745,7 @@ "app_balance#0" ] }, - "728": { + "730": { "op": "intc_1 // 1", "stack_out": [ "asset_id#0", @@ -3749,7 +3754,7 @@ "1" ] }, - "729": { + "731": { "op": "==", "defined_out": [ "asset_id#0", @@ -3762,17 +3767,17 @@ "tmp%23#0" ] }, - "730": { + "732": { "op": "assert", "stack_out": [ "asset_id#0", "tmp%18#0" ] }, - "731": { + "733": { "op": "itxn_begin" }, - "732": { + "734": { "op": "txn Sender", "defined_out": [ "asset_id#0", @@ -3785,7 +3790,7 @@ "inner_txn_params%0%%param_AssetReceiver_idx_0#0" ] }, - "734": { + "736": { "op": "intc_1 // 1", "stack_out": [ "asset_id#0", @@ -3794,7 +3799,7 @@ "1" ] }, - "735": { + "737": { "op": "itxn_field AssetAmount", "stack_out": [ "asset_id#0", @@ -3802,66 +3807,70 @@ "inner_txn_params%0%%param_AssetReceiver_idx_0#0" ] }, - "737": { + "739": { "op": "itxn_field AssetReceiver", "stack_out": [ "asset_id#0", "tmp%18#0" ] }, - "739": { + "741": { "op": "swap", "stack_out": [ "tmp%18#0", "asset_id#0" ] }, - "740": { + "742": { "op": "itxn_field XferAsset", "stack_out": [ "tmp%18#0" ] }, - "742": { + "744": { "op": "pushint 4 // axfer", "stack_out": [ "tmp%18#0", "axfer" ] }, - "744": { + "746": { "op": "itxn_field TypeEnum", "stack_out": [ "tmp%18#0" ] }, - "746": { - "op": "intc_0 // 0", + "748": { + "op": "intc_3 // 1000", + "defined_out": [ + "1000", + "tmp%18#0" + ], "stack_out": [ "tmp%18#0", - "0" + "1000" ] }, - "747": { + "749": { "op": "itxn_field Fee", "stack_out": [ "tmp%18#0" ] }, - "749": { + "751": { "op": "itxn_submit" }, - "750": { + "752": { "op": "itxn_begin" }, - "751": { + "753": { "op": "intc_0 // 0", "stack_out": [ "tmp%18#0", "0" ] }, - "752": { + "754": { "op": "bytec 6 // \"creator\"", "defined_out": [ "\"creator\"", @@ -3874,7 +3883,7 @@ "\"creator\"" ] }, - "754": { + "756": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%3#0", @@ -3887,7 +3896,7 @@ "maybe_exists%3#0" ] }, - "755": { + "757": { "error": "check self.creator exists", "op": "assert // check self.creator exists", "stack_out": [ @@ -3895,47 +3904,47 @@ "maybe_value%3#0" ] }, - "756": { + "758": { "op": "itxn_field Receiver" }, - "758": { + "760": { "op": "itxn_field Amount", "stack_out": [] }, - "760": { + "762": { "op": "intc_1 // pay", "stack_out": [ "pay" ] }, - "761": { + "763": { "op": "itxn_field TypeEnum", "stack_out": [] }, - "763": { - "op": "intc_0 // 0", + "765": { + "op": "intc_3 // 1000", "stack_out": [ - "0" + "1000" ] }, - "764": { + "766": { "op": "itxn_field Fee", "stack_out": [] }, - "766": { + "768": { "op": "itxn_submit" }, - "767": { + "769": { "op": "intc_1 // 1", "stack_out": [ "1" ] }, - "768": { + "770": { "op": "return", "stack_out": [] }, - "769": { + "771": { "subroutine": "smart_contracts.algomint.contract.Algomint.report_income[routing]", "params": {}, "block": "report_income", @@ -3948,7 +3957,7 @@ "tmp%0#0" ] }, - "772": { + "774": { "op": "dup", "defined_out": [ "tmp%0#0", @@ -3959,7 +3968,7 @@ "tmp%0#0 (copy)" ] }, - "773": { + "775": { "op": "len", "defined_out": [ "len%0#0", @@ -3970,7 +3979,7 @@ "len%0#0" ] }, - "774": { + "776": { "op": "intc_2 // 8", "defined_out": [ "8", @@ -3983,7 +3992,7 @@ "8" ] }, - "775": { + "777": { "op": "==", "defined_out": [ "eq%0#0", @@ -3994,14 +4003,14 @@ "eq%0#0" ] }, - "776": { + "778": { "error": "invalid number of bytes for arc4.uint64", "op": "assert // invalid number of bytes for arc4.uint64", "stack_out": [ "tmp%0#0" ] }, - "777": { + "779": { "op": "btoi", "defined_out": [ "quarter#0" @@ -4010,7 +4019,7 @@ "quarter#0" ] }, - "778": { + "780": { "op": "txna ApplicationArgs 2", "defined_out": [ "quarter#0", @@ -4021,7 +4030,7 @@ "tmp%2#0" ] }, - "781": { + "783": { "op": "dup", "defined_out": [ "quarter#0", @@ -4034,7 +4043,7 @@ "tmp%2#0 (copy)" ] }, - "782": { + "784": { "op": "len", "defined_out": [ "len%1#0", @@ -4047,7 +4056,7 @@ "len%1#0" ] }, - "783": { + "785": { "op": "intc_2 // 8", "stack_out": [ "quarter#0", @@ -4056,7 +4065,7 @@ "8" ] }, - "784": { + "786": { "op": "==", "defined_out": [ "eq%1#0", @@ -4069,7 +4078,7 @@ "eq%1#0" ] }, - "785": { + "787": { "error": "invalid number of bytes for arc4.uint64", "op": "assert // invalid number of bytes for arc4.uint64", "stack_out": [ @@ -4077,7 +4086,7 @@ "tmp%2#0" ] }, - "786": { + "788": { "op": "btoi", "defined_out": [ "income_amount#0", @@ -4088,7 +4097,7 @@ "income_amount#0" ] }, - "787": { + "789": { "op": "txn GroupIndex", "defined_out": [ "income_amount#0", @@ -4101,7 +4110,7 @@ "tmp%4#0" ] }, - "789": { + "791": { "op": "intc_1 // 1", "defined_out": [ "1", @@ -4116,7 +4125,7 @@ "1" ] }, - "790": { + "792": { "op": "-", "defined_out": [ "income_amount#0", @@ -4129,7 +4138,7 @@ "payout_funding#0" ] }, - "791": { + "793": { "op": "dup", "defined_out": [ "income_amount#0", @@ -4144,7 +4153,7 @@ "payout_funding#0 (copy)" ] }, - "792": { + "794": { "op": "gtxns TypeEnum", "defined_out": [ "gtxn_type%0#0", @@ -4159,7 +4168,7 @@ "gtxn_type%0#0" ] }, - "794": { + "796": { "op": "intc_1 // pay", "defined_out": [ "gtxn_type%0#0", @@ -4176,7 +4185,7 @@ "pay" ] }, - "795": { + "797": { "op": "==", "defined_out": [ "gtxn_type_matches%0#0", @@ -4191,7 +4200,7 @@ "gtxn_type_matches%0#0" ] }, - "796": { + "798": { "error": "transaction type is pay", "op": "assert // transaction type is pay", "stack_out": [ @@ -4200,7 +4209,7 @@ "payout_funding#0" ] }, - "797": { + "799": { "op": "intc_0 // 0", "defined_out": [ "0", @@ -4215,7 +4224,7 @@ "0" ] }, - "798": { + "800": { "op": "bytec_0 // \"initialized\"", "defined_out": [ "\"initialized\"", @@ -4232,7 +4241,7 @@ "\"initialized\"" ] }, - "799": { + "801": { "op": "app_global_get_ex", "defined_out": [ "income_amount#0", @@ -4249,7 +4258,7 @@ "maybe_exists%0#0" ] }, - "800": { + "802": { "error": "check self.initialized exists", "op": "assert // check self.initialized exists", "stack_out": [ @@ -4259,7 +4268,7 @@ "maybe_value%0#0" ] }, - "801": { + "803": { "op": "assert", "stack_out": [ "quarter#0", @@ -4267,7 +4276,7 @@ "payout_funding#0" ] }, - "802": { + "804": { "op": "txn Sender", "defined_out": [ "income_amount#0", @@ -4282,7 +4291,7 @@ "tmp%0#1" ] }, - "804": { + "806": { "op": "intc_0 // 0", "stack_out": [ "quarter#0", @@ -4292,7 +4301,7 @@ "0" ] }, - "805": { + "807": { "op": "bytec 6 // \"creator\"", "defined_out": [ "\"creator\"", @@ -4311,7 +4320,7 @@ "\"creator\"" ] }, - "807": { + "809": { "op": "app_global_get_ex", "defined_out": [ "income_amount#0", @@ -4330,7 +4339,7 @@ "maybe_exists%1#0" ] }, - "808": { + "810": { "error": "check self.creator exists", "op": "assert // check self.creator exists", "stack_out": [ @@ -4341,7 +4350,7 @@ "maybe_value%1#0" ] }, - "809": { + "811": { "op": "==", "defined_out": [ "income_amount#0", @@ -4356,7 +4365,7 @@ "tmp%1#1" ] }, - "810": { + "812": { "op": "assert", "stack_out": [ "quarter#0", @@ -4364,7 +4373,7 @@ "payout_funding#0" ] }, - "811": { + "813": { "op": "intc_0 // 0", "stack_out": [ "quarter#0", @@ -4373,7 +4382,7 @@ "0" ] }, - "812": { + "814": { "op": "bytec_1 // \"last_reported_quarter\"", "defined_out": [ "\"last_reported_quarter\"", @@ -4390,7 +4399,7 @@ "\"last_reported_quarter\"" ] }, - "813": { + "815": { "op": "app_global_get_ex", "defined_out": [ "income_amount#0", @@ -4407,7 +4416,7 @@ "maybe_exists%2#0" ] }, - "814": { + "816": { "error": "check self.last_reported_quarter exists", "op": "assert // check self.last_reported_quarter exists", "stack_out": [ @@ -4417,7 +4426,7 @@ "maybe_value%2#0" ] }, - "815": { + "817": { "op": "dig 3", "defined_out": [ "income_amount#0", @@ -4434,7 +4443,7 @@ "quarter#0 (copy)" ] }, - "817": { + "819": { "op": "<", "defined_out": [ "income_amount#0", @@ -4449,7 +4458,7 @@ "tmp%2#1" ] }, - "818": { + "820": { "op": "assert", "stack_out": [ "quarter#0", @@ -4457,7 +4466,7 @@ "payout_funding#0" ] }, - "819": { + "821": { "op": "dig 1", "defined_out": [ "income_amount#0", @@ -4472,7 +4481,7 @@ "income_amount#0 (copy)" ] }, - "821": { + "823": { "op": "assert", "stack_out": [ "quarter#0", @@ -4480,7 +4489,7 @@ "payout_funding#0" ] }, - "822": { + "824": { "op": "intc_0 // 0", "stack_out": [ "quarter#0", @@ -4489,7 +4498,7 @@ "0" ] }, - "823": { + "825": { "op": "bytec_3 // \"total_pct_bps\"", "defined_out": [ "\"total_pct_bps\"", @@ -4506,7 +4515,7 @@ "\"total_pct_bps\"" ] }, - "824": { + "826": { "op": "app_global_get_ex", "defined_out": [ "income_amount#0", @@ -4523,7 +4532,7 @@ "maybe_exists%3#0" ] }, - "825": { + "827": { "error": "check self.total_pct_bps exists", "op": "assert // check self.total_pct_bps exists", "stack_out": [ @@ -4533,7 +4542,7 @@ "maybe_value%3#0" ] }, - "826": { + "828": { "op": "dig 2", "stack_out": [ "quarter#0", @@ -4543,7 +4552,7 @@ "income_amount#0 (copy)" ] }, - "828": { + "830": { "op": "*", "stack_out": [ "quarter#0", @@ -4552,8 +4561,8 @@ "tmp%4#0" ] }, - "829": { - "op": "intc_3 // 10000", + "831": { + "op": "pushint 10000", "defined_out": [ "10000", "income_amount#0", @@ -4569,7 +4578,7 @@ "10000" ] }, - "830": { + "834": { "op": "/", "defined_out": [ "income_amount#0", @@ -4584,7 +4593,7 @@ "total_payout#0" ] }, - "831": { + "835": { "op": "dup", "defined_out": [ "income_amount#0", @@ -4601,7 +4610,7 @@ "total_payout#0 (copy)" ] }, - "832": { + "836": { "op": "assert", "stack_out": [ "quarter#0", @@ -4610,7 +4619,7 @@ "total_payout#0" ] }, - "833": { + "837": { "op": "dig 1", "stack_out": [ "quarter#0", @@ -4620,7 +4629,7 @@ "payout_funding#0 (copy)" ] }, - "835": { + "839": { "op": "gtxns Sender", "defined_out": [ "income_amount#0", @@ -4637,7 +4646,7 @@ "tmp%7#0" ] }, - "837": { + "841": { "op": "txn Sender", "defined_out": [ "income_amount#0", @@ -4656,7 +4665,7 @@ "tmp%8#0" ] }, - "839": { + "843": { "op": "==", "defined_out": [ "income_amount#0", @@ -4673,7 +4682,7 @@ "tmp%9#0" ] }, - "840": { + "844": { "op": "assert", "stack_out": [ "quarter#0", @@ -4682,7 +4691,7 @@ "total_payout#0" ] }, - "841": { + "845": { "op": "dig 1", "stack_out": [ "quarter#0", @@ -4692,7 +4701,7 @@ "payout_funding#0 (copy)" ] }, - "843": { + "847": { "op": "gtxns Receiver", "defined_out": [ "income_amount#0", @@ -4709,7 +4718,7 @@ "tmp%10#0" ] }, - "845": { + "849": { "op": "global CurrentApplicationAddress", "defined_out": [ "income_amount#0", @@ -4728,7 +4737,7 @@ "tmp%11#0" ] }, - "847": { + "851": { "op": "==", "defined_out": [ "income_amount#0", @@ -4745,7 +4754,7 @@ "tmp%12#0" ] }, - "848": { + "852": { "op": "assert", "stack_out": [ "quarter#0", @@ -4754,7 +4763,7 @@ "total_payout#0" ] }, - "849": { + "853": { "op": "swap", "stack_out": [ "quarter#0", @@ -4763,7 +4772,7 @@ "payout_funding#0" ] }, - "850": { + "854": { "op": "gtxns Amount", "defined_out": [ "income_amount#0", @@ -4778,7 +4787,7 @@ "tmp%13#0" ] }, - "852": { + "856": { "op": "dig 1", "stack_out": [ "quarter#0", @@ -4788,7 +4797,7 @@ "total_payout#0 (copy)" ] }, - "854": { + "858": { "op": "==", "defined_out": [ "income_amount#0", @@ -4803,7 +4812,7 @@ "tmp%14#0" ] }, - "855": { + "859": { "op": "assert", "stack_out": [ "quarter#0", @@ -4811,7 +4820,7 @@ "total_payout#0" ] }, - "856": { + "860": { "op": "bytec_1 // \"last_reported_quarter\"", "stack_out": [ "quarter#0", @@ -4820,7 +4829,7 @@ "\"last_reported_quarter\"" ] }, - "857": { + "861": { "op": "uncover 3", "stack_out": [ "income_amount#0", @@ -4829,14 +4838,14 @@ "quarter#0" ] }, - "859": { + "863": { "op": "app_global_put", "stack_out": [ "income_amount#0", "total_payout#0" ] }, - "860": { + "864": { "op": "bytec 12 // \"last_reported_income\"", "defined_out": [ "\"last_reported_income\"", @@ -4849,7 +4858,7 @@ "\"last_reported_income\"" ] }, - "862": { + "866": { "op": "uncover 2", "stack_out": [ "total_payout#0", @@ -4857,20 +4866,20 @@ "income_amount#0" ] }, - "864": { + "868": { "op": "app_global_put", "stack_out": [ "total_payout#0" ] }, - "865": { + "869": { "op": "intc_0 // 0", "stack_out": [ "total_payout#0", "0" ] }, - "866": { + "870": { "op": "bytec_2 // \"total_nfts\"", "defined_out": [ "\"total_nfts\"", @@ -4883,7 +4892,7 @@ "\"total_nfts\"" ] }, - "867": { + "871": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%4#0", @@ -4896,7 +4905,7 @@ "maybe_exists%4#0" ] }, - "868": { + "872": { "error": "check self.total_nfts exists", "op": "assert // check self.total_nfts exists", "stack_out": [ @@ -4904,7 +4913,7 @@ "maybe_value%4#0" ] }, - "869": { + "873": { "op": "/", "defined_out": [ "tmp%15#0" @@ -4913,7 +4922,7 @@ "tmp%15#0" ] }, - "870": { + "874": { "op": "bytec 5 // \"payout_per_nft\"", "defined_out": [ "\"payout_per_nft\"", @@ -4924,28 +4933,28 @@ "\"payout_per_nft\"" ] }, - "872": { + "876": { "op": "swap", "stack_out": [ "\"payout_per_nft\"", "tmp%15#0" ] }, - "873": { + "877": { "op": "app_global_put", "stack_out": [] }, - "874": { + "878": { "op": "intc_1 // 1", "stack_out": [ "1" ] }, - "875": { + "879": { "op": "return", "stack_out": [] }, - "876": { + "880": { "subroutine": "smart_contracts.algomint.contract.Algomint.claim_payout[routing]", "params": {}, "block": "claim_payout", @@ -4958,7 +4967,7 @@ "tmp%0#0" ] }, - "879": { + "883": { "op": "dup", "defined_out": [ "tmp%0#0", @@ -4969,7 +4978,7 @@ "tmp%0#0 (copy)" ] }, - "880": { + "884": { "op": "len", "defined_out": [ "len%0#0", @@ -4980,7 +4989,7 @@ "len%0#0" ] }, - "881": { + "885": { "op": "intc_2 // 8", "defined_out": [ "8", @@ -4993,7 +5002,7 @@ "8" ] }, - "882": { + "886": { "op": "==", "defined_out": [ "eq%0#0", @@ -5004,14 +5013,14 @@ "eq%0#0" ] }, - "883": { + "887": { "error": "invalid number of bytes for arc4.uint64", "op": "assert // invalid number of bytes for arc4.uint64", "stack_out": [ "tmp%0#0" ] }, - "884": { + "888": { "op": "btoi", "defined_out": [ "asset_id#0" @@ -5020,7 +5029,7 @@ "asset_id#0" ] }, - "885": { + "889": { "op": "intc_0 // 0", "defined_out": [ "0", @@ -5031,7 +5040,7 @@ "0" ] }, - "886": { + "890": { "op": "bytec_0 // \"initialized\"", "defined_out": [ "\"initialized\"", @@ -5044,7 +5053,7 @@ "\"initialized\"" ] }, - "887": { + "891": { "op": "app_global_get_ex", "defined_out": [ "asset_id#0", @@ -5057,7 +5066,7 @@ "maybe_exists%0#0" ] }, - "888": { + "892": { "error": "check self.initialized exists", "op": "assert // check self.initialized exists", "stack_out": [ @@ -5065,13 +5074,13 @@ "maybe_value%0#0" ] }, - "889": { + "893": { "op": "assert", "stack_out": [ "asset_id#0" ] }, - "890": { + "894": { "op": "dup", "defined_out": [ "asset_id#0", @@ -5082,20 +5091,20 @@ "asset_id#0 (copy)" ] }, - "891": { + "895": { "op": "assert", "stack_out": [ "asset_id#0" ] }, - "892": { + "896": { "op": "dup", "stack_out": [ "asset_id#0", "asset_id#0 (copy)" ] }, - "893": { + "897": { "op": "itob", "defined_out": [ "asset_id#0", @@ -5106,7 +5115,7 @@ "encoded_value%0#0" ] }, - "894": { + "898": { "op": "bytec 7 // \"ma_\"", "defined_out": [ "\"ma_\"", @@ -5119,7 +5128,7 @@ "\"ma_\"" ] }, - "896": { + "900": { "op": "dig 1", "defined_out": [ "\"ma_\"", @@ -5134,7 +5143,7 @@ "encoded_value%0#0 (copy)" ] }, - "898": { + "902": { "op": "concat", "defined_out": [ "asset_id#0", @@ -5147,7 +5156,7 @@ "map_prefixed_key%0#0" ] }, - "899": { + "903": { "op": "box_get", "defined_out": [ "asset_id#0", @@ -5162,7 +5171,7 @@ "maybe_exists%1#0" ] }, - "900": { + "904": { "op": "swap", "stack_out": [ "asset_id#0", @@ -5171,7 +5180,7 @@ "maybe_value%1#0" ] }, - "901": { + "905": { "op": "btoi", "defined_out": [ "asset_id#0", @@ -5186,7 +5195,7 @@ "maybe_value_converted%0#0" ] }, - "902": { + "906": { "op": "intc_0 // 0", "stack_out": [ "asset_id#0", @@ -5196,7 +5205,7 @@ "0" ] }, - "903": { + "907": { "op": "swap", "stack_out": [ "asset_id#0", @@ -5206,7 +5215,7 @@ "maybe_value_converted%0#0" ] }, - "904": { + "908": { "op": "uncover 2", "stack_out": [ "asset_id#0", @@ -5216,7 +5225,7 @@ "maybe_exists%1#0" ] }, - "906": { + "910": { "op": "select", "defined_out": [ "asset_id#0", @@ -5229,7 +5238,7 @@ "state_get%0#0" ] }, - "907": { + "911": { "op": "intc_1 // 1", "defined_out": [ "1", @@ -5244,7 +5253,7 @@ "1" ] }, - "908": { + "912": { "op": "==", "defined_out": [ "asset_id#0", @@ -5257,14 +5266,14 @@ "tmp%1#1" ] }, - "909": { + "913": { "op": "assert", "stack_out": [ "asset_id#0", "encoded_value%0#0" ] }, - "910": { + "914": { "op": "intc_0 // 0", "stack_out": [ "asset_id#0", @@ -5272,7 +5281,7 @@ "0" ] }, - "911": { + "915": { "op": "bytec_1 // \"last_reported_quarter\"", "defined_out": [ "\"last_reported_quarter\"", @@ -5287,7 +5296,7 @@ "\"last_reported_quarter\"" ] }, - "912": { + "916": { "op": "app_global_get_ex", "defined_out": [ "asset_id#0", @@ -5302,7 +5311,7 @@ "maybe_exists%2#0" ] }, - "913": { + "917": { "error": "check self.last_reported_quarter exists", "op": "assert // check self.last_reported_quarter exists", "stack_out": [ @@ -5311,7 +5320,7 @@ "maybe_value%2#0" ] }, - "914": { + "918": { "op": "dup", "defined_out": [ "asset_id#0", @@ -5326,7 +5335,7 @@ "maybe_value%2#0 (copy)" ] }, - "915": { + "919": { "op": "assert", "stack_out": [ "asset_id#0", @@ -5334,7 +5343,7 @@ "maybe_value%2#0" ] }, - "916": { + "920": { "op": "txn Sender", "defined_out": [ "asset_id#0", @@ -5349,7 +5358,7 @@ "tmp%3#0" ] }, - "918": { + "922": { "op": "uncover 3", "stack_out": [ "encoded_value%0#0", @@ -5358,7 +5367,7 @@ "asset_id#0" ] }, - "920": { + "924": { "op": "asset_holding_get AssetBalance", "defined_out": [ "encoded_value%0#0", @@ -5373,7 +5382,7 @@ "holder_opted#0" ] }, - "922": { + "926": { "op": "assert", "stack_out": [ "encoded_value%0#0", @@ -5381,7 +5390,7 @@ "holder_balance#0" ] }, - "923": { + "927": { "op": "intc_1 // 1", "stack_out": [ "encoded_value%0#0", @@ -5390,7 +5399,7 @@ "1" ] }, - "924": { + "928": { "op": "==", "defined_out": [ "encoded_value%0#0", @@ -5403,14 +5412,14 @@ "tmp%6#0" ] }, - "925": { + "929": { "op": "assert", "stack_out": [ "encoded_value%0#0", "maybe_value%2#0" ] }, - "926": { + "930": { "op": "bytec 13 // \"lc_\"", "defined_out": [ "\"lc_\"", @@ -5423,7 +5432,7 @@ "\"lc_\"" ] }, - "928": { + "932": { "op": "uncover 2", "stack_out": [ "maybe_value%2#0", @@ -5431,7 +5440,7 @@ "encoded_value%0#0" ] }, - "930": { + "934": { "op": "concat", "defined_out": [ "map_prefixed_key%1#0", @@ -5442,7 +5451,7 @@ "map_prefixed_key%1#0" ] }, - "931": { + "935": { "op": "dup", "defined_out": [ "map_prefixed_key%1#0", @@ -5455,7 +5464,7 @@ "map_prefixed_key%1#0 (copy)" ] }, - "932": { + "936": { "op": "box_get", "defined_out": [ "map_prefixed_key%1#0", @@ -5470,7 +5479,7 @@ "maybe_exists%3#0" ] }, - "933": { + "937": { "op": "swap", "stack_out": [ "maybe_value%2#0", @@ -5479,7 +5488,7 @@ "maybe_value%3#0" ] }, - "934": { + "938": { "op": "btoi", "defined_out": [ "map_prefixed_key%1#0", @@ -5494,7 +5503,7 @@ "maybe_value_converted%1#0" ] }, - "935": { + "939": { "op": "intc_0 // 0", "stack_out": [ "maybe_value%2#0", @@ -5504,7 +5513,7 @@ "0" ] }, - "936": { + "940": { "op": "swap", "stack_out": [ "maybe_value%2#0", @@ -5514,7 +5523,7 @@ "maybe_value_converted%1#0" ] }, - "937": { + "941": { "op": "uncover 2", "stack_out": [ "maybe_value%2#0", @@ -5524,7 +5533,7 @@ "maybe_exists%3#0" ] }, - "939": { + "943": { "op": "select", "defined_out": [ "claimed#0", @@ -5537,7 +5546,7 @@ "claimed#0" ] }, - "940": { + "944": { "op": "dig 2", "stack_out": [ "maybe_value%2#0", @@ -5546,7 +5555,7 @@ "maybe_value%2#0 (copy)" ] }, - "942": { + "946": { "op": "<", "defined_out": [ "map_prefixed_key%1#0", @@ -5559,14 +5568,14 @@ "tmp%7#0" ] }, - "943": { + "947": { "op": "assert", "stack_out": [ "maybe_value%2#0", "map_prefixed_key%1#0" ] }, - "944": { + "948": { "op": "intc_0 // 0", "stack_out": [ "maybe_value%2#0", @@ -5574,7 +5583,7 @@ "0" ] }, - "945": { + "949": { "op": "bytec 5 // \"payout_per_nft\"", "defined_out": [ "\"payout_per_nft\"", @@ -5589,7 +5598,7 @@ "\"payout_per_nft\"" ] }, - "947": { + "951": { "op": "app_global_get_ex", "defined_out": [ "map_prefixed_key%1#0", @@ -5604,7 +5613,7 @@ "maybe_exists%5#0" ] }, - "948": { + "952": { "error": "check self.payout_per_nft exists", "op": "assert // check self.payout_per_nft exists", "stack_out": [ @@ -5613,7 +5622,7 @@ "maybe_value%5#0" ] }, - "949": { + "953": { "op": "dup", "defined_out": [ "map_prefixed_key%1#0", @@ -5628,7 +5637,7 @@ "maybe_value%5#0 (copy)" ] }, - "950": { + "954": { "op": "assert", "stack_out": [ "maybe_value%2#0", @@ -5636,10 +5645,10 @@ "maybe_value%5#0" ] }, - "951": { + "955": { "op": "itxn_begin" }, - "952": { + "956": { "op": "txn Sender", "defined_out": [ "inner_txn_params%0%%param_Receiver_idx_0#0", @@ -5654,7 +5663,7 @@ "inner_txn_params%0%%param_Receiver_idx_0#0" ] }, - "954": { + "958": { "op": "itxn_field Receiver", "stack_out": [ "maybe_value%2#0", @@ -5662,14 +5671,14 @@ "maybe_value%5#0" ] }, - "956": { + "960": { "op": "itxn_field Amount", "stack_out": [ "maybe_value%2#0", "map_prefixed_key%1#0" ] }, - "958": { + "962": { "op": "intc_1 // pay", "defined_out": [ "map_prefixed_key%1#0", @@ -5682,39 +5691,44 @@ "pay" ] }, - "959": { + "963": { "op": "itxn_field TypeEnum", "stack_out": [ "maybe_value%2#0", "map_prefixed_key%1#0" ] }, - "961": { - "op": "intc_0 // 0", + "965": { + "op": "intc_3 // 1000", + "defined_out": [ + "1000", + "map_prefixed_key%1#0", + "maybe_value%2#0" + ], "stack_out": [ "maybe_value%2#0", "map_prefixed_key%1#0", - "0" + "1000" ] }, - "962": { + "966": { "op": "itxn_field Fee", "stack_out": [ "maybe_value%2#0", "map_prefixed_key%1#0" ] }, - "964": { + "968": { "op": "itxn_submit" }, - "965": { + "969": { "op": "swap", "stack_out": [ "map_prefixed_key%1#0", "maybe_value%2#0" ] }, - "966": { + "970": { "op": "itob", "defined_out": [ "encoded_value%3#0", @@ -5725,21 +5739,21 @@ "encoded_value%3#0" ] }, - "967": { + "971": { "op": "box_put", "stack_out": [] }, - "968": { + "972": { "op": "intc_1 // 1", "stack_out": [ "1" ] }, - "969": { + "973": { "op": "return", "stack_out": [] }, - "970": { + "974": { "subroutine": "smart_contracts.algomint.contract.Algomint.get_pending_payout[routing]", "params": {}, "block": "get_pending_payout", @@ -5749,7 +5763,7 @@ "holder_balance#0" ] }, - "972": { + "976": { "op": "txna ApplicationArgs 1", "defined_out": [ "tmp%0#0" @@ -5759,7 +5773,7 @@ "tmp%0#0" ] }, - "975": { + "979": { "op": "dup", "defined_out": [ "tmp%0#0", @@ -5771,7 +5785,7 @@ "tmp%0#0 (copy)" ] }, - "976": { + "980": { "op": "len", "defined_out": [ "len%0#0", @@ -5783,7 +5797,7 @@ "len%0#0" ] }, - "977": { + "981": { "op": "intc_2 // 8", "defined_out": [ "8", @@ -5797,7 +5811,7 @@ "8" ] }, - "978": { + "982": { "op": "==", "defined_out": [ "eq%0#0", @@ -5809,7 +5823,7 @@ "eq%0#0" ] }, - "979": { + "983": { "error": "invalid number of bytes for arc4.uint64", "op": "assert // invalid number of bytes for arc4.uint64", "stack_out": [ @@ -5817,7 +5831,7 @@ "tmp%0#0" ] }, - "980": { + "984": { "op": "btoi", "defined_out": [ "asset_id#0" @@ -5827,7 +5841,7 @@ "asset_id#0" ] }, - "981": { + "985": { "op": "dup", "defined_out": [ "asset_id#0" @@ -5838,10 +5852,10 @@ "asset_id#0" ] }, - "982": { + "986": { "op": "txna ApplicationArgs 2" }, - "985": { + "989": { "op": "dup", "defined_out": [ "address#0", @@ -5855,7 +5869,7 @@ "address#0" ] }, - "986": { + "990": { "op": "cover 2", "defined_out": [ "address#0", @@ -5869,7 +5883,7 @@ "address#0" ] }, - "988": { + "992": { "op": "dup", "defined_out": [ "address#0", @@ -5885,7 +5899,7 @@ "address#0 (copy)" ] }, - "989": { + "993": { "op": "len", "defined_out": [ "address#0", @@ -5901,7 +5915,7 @@ "len%1#0" ] }, - "990": { + "994": { "op": "pushint 32", "defined_out": [ "32", @@ -5919,7 +5933,7 @@ "32" ] }, - "992": { + "996": { "op": "==", "defined_out": [ "address#0", @@ -5935,7 +5949,7 @@ "eq%1#0" ] }, - "993": { + "997": { "error": "invalid number of bytes for arc4.static_array", "op": "assert // invalid number of bytes for arc4.static_array", "stack_out": [ @@ -5946,7 +5960,7 @@ "address#0" ] }, - "994": { + "998": { "op": "intc_0 // 0", "stack_out": [ "holder_balance#0", @@ -5957,7 +5971,7 @@ "0" ] }, - "995": { + "999": { "op": "bytec_0 // \"initialized\"", "defined_out": [ "\"initialized\"", @@ -5975,7 +5989,7 @@ "\"initialized\"" ] }, - "996": { + "1000": { "op": "app_global_get_ex", "defined_out": [ "address#0", @@ -5993,7 +6007,7 @@ "maybe_exists%0#0" ] }, - "997": { + "1001": { "error": "check self.initialized exists", "op": "assert // check self.initialized exists", "stack_out": [ @@ -6005,7 +6019,7 @@ "maybe_value%0#0" ] }, - "998": { + "1002": { "op": "assert", "stack_out": [ "holder_balance#0", @@ -6015,7 +6029,7 @@ "address#0" ] }, - "999": { + "1003": { "op": "dig 1", "defined_out": [ "address#0", @@ -6031,7 +6045,7 @@ "asset_id#0 (copy)" ] }, - "1001": { + "1005": { "op": "assert", "stack_out": [ "holder_balance#0", @@ -6041,7 +6055,7 @@ "address#0" ] }, - "1002": { + "1006": { "op": "swap", "stack_out": [ "holder_balance#0", @@ -6051,7 +6065,7 @@ "asset_id#0" ] }, - "1003": { + "1007": { "op": "itob", "defined_out": [ "address#0", @@ -6066,7 +6080,7 @@ "encoded_value%0#0" ] }, - "1004": { + "1008": { "op": "dup", "stack_out": [ "holder_balance#0", @@ -6077,7 +6091,7 @@ "encoded_value%0#0" ] }, - "1005": { + "1009": { "op": "cover 2", "defined_out": [ "address#0", @@ -6093,7 +6107,7 @@ "encoded_value%0#0" ] }, - "1007": { + "1011": { "op": "bytec 7 // \"ma_\"", "defined_out": [ "\"ma_\"", @@ -6111,7 +6125,7 @@ "\"ma_\"" ] }, - "1009": { + "1013": { "op": "swap", "stack_out": [ "holder_balance#0", @@ -6123,7 +6137,7 @@ "encoded_value%0#0" ] }, - "1010": { + "1014": { "op": "concat", "defined_out": [ "address#0", @@ -6140,7 +6154,7 @@ "map_prefixed_key%0#0" ] }, - "1011": { + "1015": { "op": "box_get", "defined_out": [ "address#0", @@ -6159,7 +6173,7 @@ "maybe_exists%1#0" ] }, - "1012": { + "1016": { "op": "swap", "stack_out": [ "holder_balance#0", @@ -6171,7 +6185,7 @@ "maybe_value%1#0" ] }, - "1013": { + "1017": { "op": "btoi", "defined_out": [ "address#0", @@ -6190,7 +6204,7 @@ "maybe_value_converted%0#0" ] }, - "1014": { + "1018": { "op": "intc_0 // 0", "stack_out": [ "holder_balance#0", @@ -6203,7 +6217,7 @@ "0" ] }, - "1015": { + "1019": { "op": "swap", "stack_out": [ "holder_balance#0", @@ -6216,7 +6230,7 @@ "maybe_value_converted%0#0" ] }, - "1016": { + "1020": { "op": "uncover 2", "stack_out": [ "holder_balance#0", @@ -6229,7 +6243,7 @@ "maybe_exists%1#0" ] }, - "1018": { + "1022": { "op": "select", "defined_out": [ "address#0", @@ -6246,7 +6260,7 @@ "state_get%0#0" ] }, - "1019": { + "1023": { "op": "intc_1 // 1", "defined_out": [ "1", @@ -6265,7 +6279,7 @@ "1" ] }, - "1020": { + "1024": { "op": "==", "defined_out": [ "address#0", @@ -6282,7 +6296,7 @@ "tmp%1#1" ] }, - "1021": { + "1025": { "op": "assert", "stack_out": [ "holder_balance#0", @@ -6292,7 +6306,7 @@ "address#0" ] }, - "1022": { + "1026": { "op": "global ZeroAddress", "defined_out": [ "address#0", @@ -6309,7 +6323,7 @@ "tmp%2#1" ] }, - "1024": { + "1028": { "op": "!=", "defined_out": [ "address#0", @@ -6325,7 +6339,7 @@ "tmp%3#1" ] }, - "1025": { + "1029": { "op": "assert", "stack_out": [ "holder_balance#0", @@ -6334,7 +6348,7 @@ "encoded_value%0#0" ] }, - "1026": { + "1030": { "op": "intc_0 // 0", "stack_out": [ "holder_balance#0", @@ -6344,7 +6358,7 @@ "0" ] }, - "1027": { + "1031": { "op": "bytec_1 // \"last_reported_quarter\"", "defined_out": [ "\"last_reported_quarter\"", @@ -6362,7 +6376,7 @@ "\"last_reported_quarter\"" ] }, - "1028": { + "1032": { "op": "app_global_get_ex", "defined_out": [ "address#0", @@ -6380,7 +6394,7 @@ "maybe_exists%2#0" ] }, - "1029": { + "1033": { "error": "check self.last_reported_quarter exists", "op": "assert // check self.last_reported_quarter exists", "stack_out": [ @@ -6391,7 +6405,7 @@ "maybe_value%2#0" ] }, - "1030": { + "1034": { "op": "bnz get_pending_payout_after_if_else@3", "stack_out": [ "holder_balance#0", @@ -6400,7 +6414,7 @@ "encoded_value%0#0" ] }, - "1033": { + "1037": { "op": "intc_0 // 0", "defined_out": [ "address#0", @@ -6416,7 +6430,7 @@ "tmp%4#0" ] }, - "1034": { + "1038": { "block": "get_pending_payout_after_inlined_smart_contracts.algomint.contract.Algomint.get_pending_payout@10", "stack_in": [ "holder_balance#0", @@ -6437,7 +6451,7 @@ "aggregate%val_as_bytes%0#0" ] }, - "1035": { + "1039": { "op": "bytec 14 // 0x151f7c75", "defined_out": [ "0x151f7c75", @@ -6452,7 +6466,7 @@ "0x151f7c75" ] }, - "1037": { + "1041": { "op": "swap", "stack_out": [ "holder_balance#0", @@ -6463,7 +6477,7 @@ "aggregate%val_as_bytes%0#0" ] }, - "1038": { + "1042": { "op": "concat", "defined_out": [ "tmp%6#0" @@ -6476,7 +6490,7 @@ "tmp%6#0" ] }, - "1039": { + "1043": { "op": "log", "stack_out": [ "holder_balance#0", @@ -6485,7 +6499,7 @@ "encoded_value%0#0" ] }, - "1040": { + "1044": { "op": "intc_1 // 1", "defined_out": [ "1" @@ -6498,7 +6512,7 @@ "1" ] }, - "1041": { + "1045": { "op": "return", "stack_out": [ "holder_balance#0", @@ -6507,7 +6521,7 @@ "encoded_value%0#0" ] }, - "1042": { + "1046": { "block": "get_pending_payout_after_if_else@3", "stack_in": [ "holder_balance#0", @@ -6527,7 +6541,7 @@ "address#0" ] }, - "1044": { + "1048": { "op": "dig 3", "defined_out": [ "address#0", @@ -6542,7 +6556,7 @@ "asset_id#0" ] }, - "1046": { + "1050": { "op": "asset_holding_get AssetBalance", "defined_out": [ "address#0", @@ -6559,7 +6573,7 @@ "holder_opted#0" ] }, - "1048": { + "1052": { "op": "swap", "stack_out": [ "holder_balance#0", @@ -6570,7 +6584,7 @@ "holder_balance#0" ] }, - "1049": { + "1053": { "op": "bury 5", "defined_out": [ "address#0", @@ -6586,7 +6600,7 @@ "holder_opted#0" ] }, - "1051": { + "1055": { "op": "bnz get_pending_payout_after_if_else@5", "stack_out": [ "holder_balance#0", @@ -6595,7 +6609,7 @@ "encoded_value%0#0" ] }, - "1054": { + "1058": { "op": "intc_0 // 0", "defined_out": [ "address#0", @@ -6611,10 +6625,10 @@ "tmp%4#0" ] }, - "1055": { + "1059": { "op": "b get_pending_payout_after_inlined_smart_contracts.algomint.contract.Algomint.get_pending_payout@10" }, - "1058": { + "1062": { "block": "get_pending_payout_after_if_else@5", "stack_in": [ "holder_balance#0", @@ -6634,7 +6648,7 @@ "holder_balance#0" ] }, - "1060": { + "1064": { "op": "intc_1 // 1", "defined_out": [ "1", @@ -6649,7 +6663,7 @@ "1" ] }, - "1061": { + "1065": { "op": "!=", "defined_out": [ "holder_balance#0", @@ -6663,7 +6677,7 @@ "tmp%7#0" ] }, - "1062": { + "1066": { "op": "bz get_pending_payout_after_if_else@7", "stack_out": [ "holder_balance#0", @@ -6672,7 +6686,7 @@ "encoded_value%0#0" ] }, - "1065": { + "1069": { "op": "intc_0 // 0", "defined_out": [ "holder_balance#0", @@ -6686,10 +6700,10 @@ "tmp%4#0" ] }, - "1066": { + "1070": { "op": "b get_pending_payout_after_inlined_smart_contracts.algomint.contract.Algomint.get_pending_payout@10" }, - "1069": { + "1073": { "block": "get_pending_payout_after_if_else@7", "stack_in": [ "holder_balance#0", @@ -6709,7 +6723,7 @@ "\"lc_\"" ] }, - "1071": { + "1075": { "op": "dig 1", "defined_out": [ "\"lc_\"", @@ -6724,7 +6738,7 @@ "encoded_value%0#0" ] }, - "1073": { + "1077": { "op": "concat", "defined_out": [ "encoded_value%0#0", @@ -6738,7 +6752,7 @@ "map_prefixed_key%1#0" ] }, - "1074": { + "1078": { "op": "box_get", "defined_out": [ "encoded_value%0#0", @@ -6754,7 +6768,7 @@ "maybe_exists%3#0" ] }, - "1075": { + "1079": { "op": "swap", "stack_out": [ "holder_balance#0", @@ -6765,7 +6779,7 @@ "maybe_value%3#0" ] }, - "1076": { + "1080": { "op": "btoi", "defined_out": [ "encoded_value%0#0", @@ -6781,7 +6795,7 @@ "maybe_value_converted%1#0" ] }, - "1077": { + "1081": { "op": "intc_0 // 0", "defined_out": [ "0", @@ -6799,7 +6813,7 @@ "0" ] }, - "1078": { + "1082": { "op": "swap", "stack_out": [ "holder_balance#0", @@ -6811,7 +6825,7 @@ "maybe_value_converted%1#0" ] }, - "1079": { + "1083": { "op": "uncover 2", "stack_out": [ "holder_balance#0", @@ -6823,7 +6837,7 @@ "maybe_exists%3#0" ] }, - "1081": { + "1085": { "op": "select", "defined_out": [ "claimed#0", @@ -6837,7 +6851,7 @@ "claimed#0" ] }, - "1082": { + "1086": { "op": "intc_0 // 0", "stack_out": [ "holder_balance#0", @@ -6848,7 +6862,7 @@ "0" ] }, - "1083": { + "1087": { "op": "bytec_1 // \"last_reported_quarter\"", "defined_out": [ "\"last_reported_quarter\"", @@ -6866,7 +6880,7 @@ "\"last_reported_quarter\"" ] }, - "1084": { + "1088": { "op": "app_global_get_ex", "defined_out": [ "claimed#0", @@ -6884,7 +6898,7 @@ "maybe_exists%4#0" ] }, - "1085": { + "1089": { "error": "check self.last_reported_quarter exists", "op": "assert // check self.last_reported_quarter exists", "stack_out": [ @@ -6896,7 +6910,7 @@ "maybe_value%4#0" ] }, - "1086": { + "1090": { "op": "<", "defined_out": [ "encoded_value%0#0", @@ -6910,7 +6924,7 @@ "tmp%8#0" ] }, - "1087": { + "1091": { "op": "bz get_pending_payout_after_if_else@9", "stack_out": [ "holder_balance#0", @@ -6919,7 +6933,7 @@ "encoded_value%0#0" ] }, - "1090": { + "1094": { "op": "intc_0 // 0", "stack_out": [ "holder_balance#0", @@ -6929,7 +6943,7 @@ "0" ] }, - "1091": { + "1095": { "op": "bytec 5 // \"payout_per_nft\"", "defined_out": [ "\"payout_per_nft\"", @@ -6945,7 +6959,7 @@ "\"payout_per_nft\"" ] }, - "1093": { + "1097": { "op": "app_global_get_ex", "defined_out": [ "encoded_value%0#0", @@ -6961,7 +6975,7 @@ "maybe_exists%5#0" ] }, - "1094": { + "1098": { "error": "check self.payout_per_nft exists", "op": "assert // check self.payout_per_nft exists", "defined_out": [ @@ -6976,10 +6990,10 @@ "tmp%4#0" ] }, - "1095": { + "1099": { "op": "b get_pending_payout_after_inlined_smart_contracts.algomint.contract.Algomint.get_pending_payout@10" }, - "1098": { + "1102": { "block": "get_pending_payout_after_if_else@9", "stack_in": [ "holder_balance#0", @@ -6999,10 +7013,10 @@ "tmp%4#0" ] }, - "1099": { + "1103": { "op": "b get_pending_payout_after_inlined_smart_contracts.algomint.contract.Algomint.get_pending_payout@10" }, - "1102": { + "1106": { "subroutine": "smart_contracts.algomint.contract.Algomint.get_terms[routing]", "params": {}, "block": "get_terms", @@ -7012,7 +7026,7 @@ "tmp%0#0" ] }, - "1103": { + "1107": { "op": "dup", "defined_out": [ "0" @@ -7022,7 +7036,7 @@ "0" ] }, - "1104": { + "1108": { "op": "bytec_0 // \"initialized\"", "defined_out": [ "\"initialized\"", @@ -7034,7 +7048,7 @@ "\"initialized\"" ] }, - "1105": { + "1109": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%0#0", @@ -7046,7 +7060,7 @@ "maybe_exists%0#0" ] }, - "1106": { + "1110": { "error": "check self.initialized exists", "op": "assert // check self.initialized exists", "stack_out": [ @@ -7054,13 +7068,13 @@ "maybe_value%0#0" ] }, - "1107": { + "1111": { "op": "bnz get_terms_after_if_else@3", "stack_out": [ "tmp%0#0" ] }, - "1110": { + "1114": { "op": "global ZeroAddress", "defined_out": [ "tmp%0#0" @@ -7070,7 +7084,7 @@ "tmp%0#0" ] }, - "1112": { + "1116": { "op": "bury 1", "defined_out": [ "tmp%0#0" @@ -7079,10 +7093,10 @@ "tmp%0#0" ] }, - "1114": { + "1118": { "op": "intc_0 // 0" }, - "1115": { + "1119": { "op": "dupn 5", "defined_out": [ "tmp%0#0", @@ -7103,7 +7117,7 @@ "tmp%6#0" ] }, - "1117": { + "1121": { "block": "get_terms_after_inlined_smart_contracts.algomint.contract.Algomint.get_terms@4", "stack_in": [ "tmp%0#0", @@ -7128,7 +7142,7 @@ "tmp%1#0" ] }, - "1119": { + "1123": { "op": "itob", "defined_out": [ "aggregate%val_as_bytes%0#0" @@ -7143,7 +7157,7 @@ "aggregate%val_as_bytes%0#0" ] }, - "1120": { + "1124": { "op": "dig 6", "defined_out": [ "aggregate%val_as_bytes%0#0", @@ -7160,7 +7174,7 @@ "tmp%0#0" ] }, - "1122": { + "1126": { "op": "swap", "stack_out": [ "tmp%0#0", @@ -7173,7 +7187,7 @@ "aggregate%val_as_bytes%0#0" ] }, - "1123": { + "1127": { "op": "concat", "defined_out": [ "aggregate%head%1#0", @@ -7189,7 +7203,7 @@ "aggregate%head%1#0" ] }, - "1124": { + "1128": { "op": "uncover 5", "defined_out": [ "aggregate%head%1#0", @@ -7206,7 +7220,7 @@ "tmp%2#0" ] }, - "1126": { + "1130": { "op": "itob", "defined_out": [ "aggregate%head%1#0", @@ -7223,7 +7237,7 @@ "aggregate%val_as_bytes%1#0" ] }, - "1127": { + "1131": { "op": "concat", "defined_out": [ "aggregate%head%2#0", @@ -7238,7 +7252,7 @@ "aggregate%head%2#0" ] }, - "1128": { + "1132": { "op": "uncover 4", "defined_out": [ "aggregate%head%2#0", @@ -7254,7 +7268,7 @@ "tmp%3#0" ] }, - "1130": { + "1134": { "op": "itob", "defined_out": [ "aggregate%head%2#0", @@ -7270,7 +7284,7 @@ "aggregate%val_as_bytes%2#0" ] }, - "1131": { + "1135": { "op": "concat", "defined_out": [ "aggregate%head%3#0", @@ -7284,7 +7298,7 @@ "aggregate%head%3#0" ] }, - "1132": { + "1136": { "op": "uncover 3", "defined_out": [ "aggregate%head%3#0", @@ -7299,7 +7313,7 @@ "tmp%4#0" ] }, - "1134": { + "1138": { "op": "itob", "defined_out": [ "aggregate%head%3#0", @@ -7314,7 +7328,7 @@ "aggregate%val_as_bytes%3#0" ] }, - "1135": { + "1139": { "op": "concat", "defined_out": [ "aggregate%head%4#0", @@ -7327,7 +7341,7 @@ "aggregate%head%4#0" ] }, - "1136": { + "1140": { "op": "uncover 2", "defined_out": [ "aggregate%head%4#0", @@ -7341,7 +7355,7 @@ "tmp%5#0" ] }, - "1138": { + "1142": { "op": "itob", "defined_out": [ "aggregate%head%4#0", @@ -7355,7 +7369,7 @@ "aggregate%val_as_bytes%4#0" ] }, - "1139": { + "1143": { "op": "concat", "defined_out": [ "aggregate%head%5#0", @@ -7367,7 +7381,7 @@ "aggregate%head%5#0" ] }, - "1140": { + "1144": { "op": "swap", "defined_out": [ "aggregate%head%5#0", @@ -7380,7 +7394,7 @@ "tmp%6#0" ] }, - "1141": { + "1145": { "op": "itob", "defined_out": [ "aggregate%head%5#0", @@ -7393,7 +7407,7 @@ "aggregate%val_as_bytes%5#0" ] }, - "1142": { + "1146": { "op": "concat", "defined_out": [ "aggregate%head%6#0", @@ -7404,7 +7418,7 @@ "aggregate%head%6#0" ] }, - "1143": { + "1147": { "op": "bytec 14 // 0x151f7c75", "defined_out": [ "0x151f7c75", @@ -7417,7 +7431,7 @@ "0x151f7c75" ] }, - "1145": { + "1149": { "op": "swap", "stack_out": [ "tmp%0#0", @@ -7425,7 +7439,7 @@ "aggregate%head%6#0" ] }, - "1146": { + "1150": { "op": "concat", "defined_out": [ "tmp%0#0", @@ -7436,13 +7450,13 @@ "tmp%8#0" ] }, - "1147": { + "1151": { "op": "log", "stack_out": [ "tmp%0#0" ] }, - "1148": { + "1152": { "op": "intc_1 // 1", "defined_out": [ "1", @@ -7453,13 +7467,13 @@ "1" ] }, - "1149": { + "1153": { "op": "return", "stack_out": [ "tmp%0#0" ] }, - "1150": { + "1154": { "block": "get_terms_after_if_else@3", "stack_in": [ "tmp%0#0" @@ -7473,7 +7487,7 @@ "0" ] }, - "1151": { + "1155": { "op": "bytec 6 // \"creator\"", "defined_out": [ "\"creator\"", @@ -7485,7 +7499,7 @@ "\"creator\"" ] }, - "1153": { + "1157": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%1#0", @@ -7497,7 +7511,7 @@ "maybe_exists%1#0" ] }, - "1154": { + "1158": { "error": "check self.creator exists", "op": "assert // check self.creator exists", "stack_out": [ @@ -7505,7 +7519,7 @@ "maybe_value%1#0" ] }, - "1155": { + "1159": { "op": "intc_0 // 0", "stack_out": [ "tmp%0#0", @@ -7513,7 +7527,7 @@ "0" ] }, - "1156": { + "1160": { "op": "bytec_2 // \"total_nfts\"", "defined_out": [ "\"total_nfts\"", @@ -7527,7 +7541,7 @@ "\"total_nfts\"" ] }, - "1157": { + "1161": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%2#0", @@ -7541,7 +7555,7 @@ "maybe_exists%2#0" ] }, - "1158": { + "1162": { "error": "check self.total_nfts exists", "op": "assert // check self.total_nfts exists", "stack_out": [ @@ -7550,7 +7564,7 @@ "maybe_value%2#0" ] }, - "1159": { + "1163": { "op": "intc_0 // 0", "stack_out": [ "tmp%0#0", @@ -7559,7 +7573,7 @@ "0" ] }, - "1160": { + "1164": { "op": "bytec_3 // \"total_pct_bps\"", "defined_out": [ "\"total_pct_bps\"", @@ -7575,7 +7589,7 @@ "\"total_pct_bps\"" ] }, - "1161": { + "1165": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%3#0", @@ -7591,7 +7605,7 @@ "maybe_exists%3#0" ] }, - "1162": { + "1166": { "error": "check self.total_pct_bps exists", "op": "assert // check self.total_pct_bps exists", "stack_out": [ @@ -7601,7 +7615,7 @@ "maybe_value%3#0" ] }, - "1163": { + "1167": { "op": "intc_0 // 0", "stack_out": [ "tmp%0#0", @@ -7611,7 +7625,7 @@ "0" ] }, - "1164": { + "1168": { "op": "bytec 8 // \"duration_years\"", "defined_out": [ "\"duration_years\"", @@ -7629,7 +7643,7 @@ "\"duration_years\"" ] }, - "1166": { + "1170": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%4#0", @@ -7647,7 +7661,7 @@ "maybe_exists%4#0" ] }, - "1167": { + "1171": { "error": "check self.duration_years exists", "op": "assert // check self.duration_years exists", "stack_out": [ @@ -7658,7 +7672,7 @@ "maybe_value%4#0" ] }, - "1168": { + "1172": { "op": "intc_0 // 0", "stack_out": [ "tmp%0#0", @@ -7669,7 +7683,7 @@ "0" ] }, - "1169": { + "1173": { "op": "bytec 9 // \"start_quarter\"", "defined_out": [ "\"start_quarter\"", @@ -7689,7 +7703,7 @@ "\"start_quarter\"" ] }, - "1171": { + "1175": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%5#0", @@ -7709,7 +7723,7 @@ "maybe_exists%5#0" ] }, - "1172": { + "1176": { "error": "check self.start_quarter exists", "op": "assert // check self.start_quarter exists", "stack_out": [ @@ -7721,7 +7735,7 @@ "maybe_value%5#0" ] }, - "1173": { + "1177": { "op": "intc_0 // 0", "stack_out": [ "tmp%0#0", @@ -7733,7 +7747,7 @@ "0" ] }, - "1174": { + "1178": { "op": "bytec 4 // \"sale_price\"", "defined_out": [ "\"sale_price\"", @@ -7755,7 +7769,7 @@ "\"sale_price\"" ] }, - "1176": { + "1180": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%6#0", @@ -7777,7 +7791,7 @@ "maybe_exists%6#0" ] }, - "1177": { + "1181": { "error": "check self.sale_price exists", "op": "assert // check self.sale_price exists", "stack_out": [ @@ -7790,7 +7804,7 @@ "maybe_value%6#0" ] }, - "1178": { + "1182": { "op": "intc_0 // 0", "stack_out": [ "tmp%0#0", @@ -7803,7 +7817,7 @@ "0" ] }, - "1179": { + "1183": { "op": "bytec 10 // \"first_asset_id\"", "defined_out": [ "\"first_asset_id\"", @@ -7827,7 +7841,7 @@ "\"first_asset_id\"" ] }, - "1181": { + "1185": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%7#0", @@ -7851,7 +7865,7 @@ "maybe_exists%7#0" ] }, - "1182": { + "1186": { "error": "check self.first_asset_id exists", "op": "assert // check self.first_asset_id exists", "defined_out": [ @@ -7874,7 +7888,7 @@ "tmp%6#0" ] }, - "1183": { + "1187": { "op": "uncover 6", "defined_out": [ "tmp%0#0", @@ -7896,7 +7910,7 @@ "tmp%0#0" ] }, - "1185": { + "1189": { "op": "bury 7", "stack_out": [ "tmp%0#0", @@ -7908,7 +7922,7 @@ "tmp%6#0" ] }, - "1187": { + "1191": { "op": "b get_terms_after_inlined_smart_contracts.algomint.contract.Algomint.get_terms@4" } } diff --git a/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.approval.teal b/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.approval.teal index cd2f1b6..6b72fd6 100644 --- a/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.approval.teal +++ b/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.approval.teal @@ -3,7 +3,7 @@ // algopy.arc4.ARC4Contract.approval_program() -> uint64: main: - intcblock 0 1 8 10000 + intcblock 0 1 8 1000 bytecblock "initialized" "last_reported_quarter" "total_nfts" "total_pct_bps" "sale_price" "payout_per_nft" "creator" "ma_" "duration_years" "start_quarter" "first_asset_id" "pct_per_nft_bps" "last_reported_income" "lc_" 0x151f7c75 txn ApplicationID bnz main_after_if_else@2 @@ -155,7 +155,7 @@ mint_future_nft: // smart_contracts/algomint/contract.py:38 // assert total_pct_bps <= UInt64(10_000) dig 4 - intc_3 // 10000 + pushint 10000 <= assert // smart_contracts/algomint/contract.py:39 @@ -264,7 +264,7 @@ mint_future_nft_for_header@2: // url=b"template-ipfs://{ipfscid:1:raw:reserve:sha2-256}", // manager=Global.current_application_address, // reserve=Global.current_application_address, - // fee=0, + // fee=1000, // ).submit() itxn_begin // smart_contracts/algomint/contract.py:67 @@ -305,8 +305,8 @@ mint_future_nft_for_header@2: pushint 3 // acfg itxn_field TypeEnum // smart_contracts/algomint/contract.py:69 - // fee=0, - intc_0 // 0 + // fee=1000, + intc_3 // 1000 itxn_field Fee // smart_contracts/algomint/contract.py:59-70 // created = itxn.AssetConfig( @@ -319,7 +319,7 @@ mint_future_nft_for_header@2: // url=b"template-ipfs://{ipfscid:1:raw:reserve:sha2-256}", // manager=Global.current_application_address, // reserve=Global.current_application_address, - // fee=0, + // fee=1000, // ).submit() itxn_submit itxn CreatedAssetID @@ -487,7 +487,7 @@ buy_nft: // xfer_asset=asset, // asset_receiver=Txn.sender, // asset_amount=UInt64(1), - // fee=0, + // fee=1000, // ).submit() itxn_begin // smart_contracts/algomint/contract.py:105 @@ -506,8 +506,8 @@ buy_nft: pushint 4 // axfer itxn_field TypeEnum // smart_contracts/algomint/contract.py:107 - // fee=0, - intc_0 // 0 + // fee=1000, + intc_3 // 1000 itxn_field Fee // smart_contracts/algomint/contract.py:102-108 // # Transfer NFT to investor and forward payment to creator. @@ -515,14 +515,14 @@ buy_nft: // xfer_asset=asset, // asset_receiver=Txn.sender, // asset_amount=UInt64(1), - // fee=0, + // fee=1000, // ).submit() itxn_submit // smart_contracts/algomint/contract.py:109-113 // itxn.Payment( // receiver=self.creator.value, // amount=payment.amount, - // fee=0, + // fee=1000, // ).submit() itxn_begin // smart_contracts/algomint/contract.py:110 @@ -538,14 +538,14 @@ buy_nft: intc_1 // pay itxn_field TypeEnum // smart_contracts/algomint/contract.py:112 - // fee=0, - intc_0 // 0 + // fee=1000, + intc_3 // 1000 itxn_field Fee // smart_contracts/algomint/contract.py:109-113 // itxn.Payment( // receiver=self.creator.value, // amount=payment.amount, - // fee=0, + // fee=1000, // ).submit() itxn_submit // smart_contracts/algomint/contract.py:75 @@ -617,7 +617,7 @@ report_income: assert // check self.total_pct_bps exists dig 2 * - intc_3 // 10000 + pushint 10000 / // smart_contracts/algomint/contract.py:125 // assert total_payout > UInt64(0) @@ -761,7 +761,7 @@ claim_payout: // itxn.Payment( // amount=self.payout_per_nft.value, // receiver=Txn.sender, - // fee=0, + // fee=1000, // ).submit() itxn_begin // smart_contracts/algomint/contract.py:153 @@ -774,14 +774,14 @@ claim_payout: intc_1 // pay itxn_field TypeEnum // smart_contracts/algomint/contract.py:154 - // fee=0, - intc_0 // 0 + // fee=1000, + intc_3 // 1000 itxn_field Fee // smart_contracts/algomint/contract.py:151-155 // itxn.Payment( // amount=self.payout_per_nft.value, // receiver=Txn.sender, - // fee=0, + // fee=1000, // ).submit() itxn_submit // smart_contracts/algomint/contract.py:157 diff --git a/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.arc56.json b/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.arc56.json index 26b7cb6..c2aed9e 100644 --- a/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.arc56.json +++ b/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/Algomint.arc56.json @@ -275,83 +275,83 @@ "sourceInfo": [ { "pc": [ - 755, - 808, - 1154 + 757, + 810, + 1158 ], "errorMessage": "check self.creator exists" }, { "pc": [ - 1167 + 1171 ], "errorMessage": "check self.duration_years exists" }, { "pc": [ - 1182 + 1186 ], "errorMessage": "check self.first_asset_id exists" }, { "pc": [ 373, - 644, - 800, - 888, - 997, - 1106 + 646, + 802, + 892, + 1001, + 1110 ], "errorMessage": "check self.initialized exists" }, { "pc": [ - 814, - 913, - 1029, - 1085 + 816, + 917, + 1033, + 1089 ], "errorMessage": "check self.last_reported_quarter exists" }, { "pc": [ - 948, - 1094 + 952, + 1098 ], "errorMessage": "check self.payout_per_nft exists" }, { "pc": [ - 716, - 1177 + 718, + 1181 ], "errorMessage": "check self.sale_price exists" }, { "pc": [ - 1172 + 1176 ], "errorMessage": "check self.start_quarter exists" }, { "pc": [ - 452, - 868, - 1158 + 454, + 872, + 1162 ], "errorMessage": "check self.total_nfts exists" }, { "pc": [ - 448, - 825, - 1162 + 450, + 827, + 1166 ], "errorMessage": "check self.total_pct_bps exists" }, { "pc": [ - 993 + 997 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, @@ -362,25 +362,25 @@ 340, 349, 358, - 617, - 776, - 785, - 883, - 979 + 619, + 778, + 787, + 887, + 983 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ - 630 + 632 ], "errorMessage": "transaction type is axfer" }, { "pc": [ 369, - 640, - 796 + 642, + 798 ], "errorMessage": "transaction type is pay" } @@ -393,11 +393,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCAxMDAwMAogICAgYnl0ZWNibG9jayAiaW5pdGlhbGl6ZWQiICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiICJ0b3RhbF9uZnRzIiAidG90YWxfcGN0X2JwcyIgInNhbGVfcHJpY2UiICJwYXlvdXRfcGVyX25mdCIgImNyZWF0b3IiICJtYV8iICJkdXJhdGlvbl95ZWFycyIgInN0YXJ0X3F1YXJ0ZXIiICJmaXJzdF9hc3NldF9pZCIgInBjdF9wZXJfbmZ0X2JwcyIgImxhc3RfcmVwb3J0ZWRfaW5jb21lIiAibGNfIiAweDE1MWY3Yzc1CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OAogICAgLy8gc2VsZi50b3RhbF9uZnRzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjkKICAgIC8vIHNlbGYudG90YWxfcGN0X2JwcyA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjXzMgLy8gInRvdGFsX3BjdF9icHMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMAogICAgLy8gc2VsZi5kdXJhdGlvbl95ZWFycyA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjIDggLy8gImR1cmF0aW9uX3llYXJzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTEKICAgIC8vIHNlbGYuc3RhcnRfcXVhcnRlciA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjIDkgLy8gInN0YXJ0X3F1YXJ0ZXIiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMgogICAgLy8gc2VsZi5zYWxlX3ByaWNlID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgNCAvLyAic2FsZV9wcmljZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzCiAgICAvLyBzZWxmLmZpcnN0X2Fzc2V0X2lkID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgMTAgLy8gImZpcnN0X2Fzc2V0X2lkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQKICAgIC8vIHNlbGYucGN0X3Blcl9uZnRfYnBzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgMTEgLy8gInBjdF9wZXJfbmZ0X2JwcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1CiAgICAvLyBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjXzEgLy8gImxhc3RfcmVwb3J0ZWRfcXVhcnRlciIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE2CiAgICAvLyBzZWxmLmxhc3RfcmVwb3J0ZWRfaW5jb21lID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgMTIgLy8gImxhc3RfcmVwb3J0ZWRfaW5jb21lIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTcKICAgIC8vIHNlbGYucGF5b3V0X3Blcl9uZnQgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyA1IC8vICJwYXlvdXRfcGVyX25mdCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE4CiAgICAvLyBzZWxmLmluaXRpYWxpemVkID0gR2xvYmFsU3RhdGUoRmFsc2UpCiAgICBieXRlY18wIC8vICJpbml0aWFsaXplZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NAogICAgLy8gY2xhc3MgQWxnb21pbnQoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDE1CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHhhYzZlMWEwNCAweGRkOTgwZTZkIDB4YmQ4ZGM5N2UgMHg5NDVmMTc3NyAweDU3Mzc3MTc4IDB4YmVmYzE2YzUgLy8gbWV0aG9kICJtaW50X2Z1dHVyZV9uZnQodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCxwYXkpdm9pZCIsIG1ldGhvZCAiYnV5X25mdCh1aW50NjQsYXhmZXIscGF5KXZvaWQiLCBtZXRob2QgInJlcG9ydF9pbmNvbWUodWludDY0LHVpbnQ2NCxwYXkpdm9pZCIsIG1ldGhvZCAiY2xhaW1fcGF5b3V0KHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRfcGVuZGluZ19wYXlvdXQodWludDY0LGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJnZXRfdGVybXMoKShhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1pbnRfZnV0dXJlX25mdCBidXlfbmZ0IHJlcG9ydF9pbmNvbWUgY2xhaW1fcGF5b3V0IGdldF9wZW5kaW5nX3BheW91dCBnZXRfdGVybXMKICAgIGVycgoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAxNToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50Lm1pbnRfZnV0dXJlX25mdFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm1pbnRfZnV0dXJlX25mdDoKICAgIHB1c2hieXRlcyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MzUKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MzYKICAgIC8vIGFzc2VydCB0b3RhbF9uZnRzID4gVUludDY0KDApCiAgICBkaWcgNQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MzcKICAgIC8vIGFzc2VydCB0b3RhbF9wY3RfYnBzID4gVUludDY0KDApCiAgICBkaWcgNAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MzgKICAgIC8vIGFzc2VydCB0b3RhbF9wY3RfYnBzIDw9IFVJbnQ2NCgxMF8wMDApCiAgICBkaWcgNAogICAgaW50Y18zIC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MzkKICAgIC8vIGFzc2VydCBkdXJhdGlvbl95ZWFycyA+IFVJbnQ2NCgwKQogICAgZGlnIDMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQwCiAgICAvLyBhc3NlcnQgc3RhcnRfcXVhcnRlciA+IFVJbnQ2NCgwKQogICAgZGlnIDIKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBhc3NlcnQgc2FsZV9wcmljZSA+IFVJbnQ2NCgwKQogICAgZGlnIDEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQzCiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGR1cAogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDQKICAgIC8vIGFzc2VydCBtYnJfcGF5bWVudC5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQ1LTQ2CiAgICAvLyAjIE5PVEU6IEV4YWN0IE1CUiBkZXBlbmRzIG9uIHByb3RvY29sIHBhcmFtczsgcmVxdWlyZSBhIHNlbnNpYmxlIG1pbmltdW0gZm9yIGRlbW8uCiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQuYW1vdW50ID49IFVJbnQ2NCgxXzAwMF8wMDApCiAgICBndHhucyBBbW91bnQKICAgIHB1c2hpbnQgMTAwMDAwMAogICAgPj0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQ4CiAgICAvLyBzZWxmLmNyZWF0b3IudmFsdWUgPSBUeG4uc2VuZGVyCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo0OQogICAgLy8gc2VsZi50b3RhbF9uZnRzLnZhbHVlID0gdG90YWxfbmZ0cwogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIHVuY292ZXIgNQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MAogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlID0gdG90YWxfcGN0X2JwcwogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIHVuY292ZXIgNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MQogICAgLy8gc2VsZi5kdXJhdGlvbl95ZWFycy52YWx1ZSA9IGR1cmF0aW9uX3llYXJzCiAgICBieXRlYyA4IC8vICJkdXJhdGlvbl95ZWFycyIKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MgogICAgLy8gc2VsZi5zdGFydF9xdWFydGVyLnZhbHVlID0gc3RhcnRfcXVhcnRlcgogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MwogICAgLy8gc2VsZi5zYWxlX3ByaWNlLnZhbHVlID0gc2FsZV9wcmljZQogICAgYnl0ZWMgNCAvLyAic2FsZV9wcmljZSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTQKICAgIC8vIHNlbGYucGN0X3Blcl9uZnRfYnBzLnZhbHVlID0gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlIC8vIHNlbGYudG90YWxfbmZ0cy52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInRvdGFsX3BjdF9icHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfcGN0X2JwcyBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX25mdHMgZXhpc3RzCiAgICAvCiAgICBieXRlYyAxMSAvLyAicGN0X3Blcl9uZnRfYnBzIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1NQogICAgLy8gc2VsZi5pbml0aWFsaXplZC52YWx1ZSA9IFRydWUKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTctNTgKICAgIC8vICMgTWludCBhIGZpeGVkIHNlcmllcyBvZiBBUkMtMTkgc3R5bGUgTkZUcyBmcm9tIHRoZSBhcHAgYWNjb3VudC4KICAgIC8vIGZvciBpZHggaW4gdXJhbmdlKHRvdGFsX25mdHMpOgogICAgaW50Y18wIC8vIDAKCm1pbnRfZnV0dXJlX25mdF9mb3JfaGVhZGVyQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTctNTgKICAgIC8vICMgTWludCBhIGZpeGVkIHNlcmllcyBvZiBBUkMtMTkgc3R5bGUgTkZUcyBmcm9tIHRoZSBhcHAgYWNjb3VudC4KICAgIC8vIGZvciBpZHggaW4gdXJhbmdlKHRvdGFsX25mdHMpOgogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogbWludF9mdXR1cmVfbmZ0X2FmdGVyX2ZvckA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTktNzAKICAgIC8vIGNyZWF0ZWQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIHRvdGFsPTEsCiAgICAvLyAgICAgZGVjaW1hbHM9MCwKICAgIC8vICAgICBkZWZhdWx0X2Zyb3plbj1GYWxzZSwKICAgIC8vICAgICBhc3NldF9uYW1lPWIiRnV0dXJlIEVhcm5pbmcgTkZUIiwKICAgIC8vICAgICB1bml0X25hbWU9YiJGRU5GVCIsCiAgICAvLyAgICAgIyBBUkMtMTkgdGVtcGxhdGUgVVJMIChDSUQgc291cmNlZCBmcm9tIHJlc2VydmUgYWNjb3VudCBieSBjbGllbnRzKS4KICAgIC8vICAgICB1cmw9YiJ0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn0iLAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjcKICAgIC8vIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjgKICAgIC8vIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGR1cAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjUtNjYKICAgIC8vICMgQVJDLTE5IHRlbXBsYXRlIFVSTCAoQ0lEIHNvdXJjZWQgZnJvbSByZXNlcnZlIGFjY291bnQgYnkgY2xpZW50cykuCiAgICAvLyB1cmw9YiJ0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn0iLAogICAgcHVzaGJ5dGVzIDB4NzQ2NTZkNzA2YzYxNzQ2NTJkNjk3MDY2NzMzYTJmMmY3YjY5NzA2NjczNjM2OTY0M2EzMTNhNzI2MTc3M2E3MjY1NzM2NTcyNzY2NTNhNzM2ODYxMzIyZDMyMzUzNjdkCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjQKICAgIC8vIHVuaXRfbmFtZT1iIkZFTkZUIiwKICAgIHB1c2hieXRlcyAweDQ2NDU0ZTQ2NTQKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjYzCiAgICAvLyBhc3NldF9uYW1lPWIiRnV0dXJlIEVhcm5pbmcgTkZUIiwKICAgIHB1c2hieXRlcyAweDQ2NzU3NDc1NzI2NTIwNDU2MTcyNmU2OTZlNjcyMDRlNDY1NAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MgogICAgLy8gZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlZmF1bHRGcm96ZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MQogICAgLy8gZGVjaW1hbHM9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MAogICAgLy8gdG90YWw9MSwKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1OQogICAgLy8gY3JlYXRlZCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjY5CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU5LTcwCiAgICAvLyBjcmVhdGVkID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD0xLAogICAgLy8gICAgIGRlY2ltYWxzPTAsCiAgICAvLyAgICAgZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICAvLyAgICAgYXNzZXRfbmFtZT1iIkZ1dHVyZSBFYXJuaW5nIE5GVCIsCiAgICAvLyAgICAgdW5pdF9uYW1lPWIiRkVORlQiLAogICAgLy8gICAgICMgQVJDLTE5IHRlbXBsYXRlIFVSTCAoQ0lEIHNvdXJjZWQgZnJvbSByZXNlcnZlIGFjY291bnQgYnkgY2xpZW50cykuCiAgICAvLyAgICAgdXJsPWIidGVtcGxhdGUtaXBmczovL3tpcGZzY2lkOjE6cmF3OnJlc2VydmU6c2hhMi0yNTZ9IiwKICAgIC8vICAgICBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIGJ1cnkgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjcxCiAgICAvLyBpZiBpZHggPT0gVUludDY0KDApOgogICAgZHVwCiAgICBibnogbWludF9mdXR1cmVfbmZ0X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjcyCiAgICAvLyBzZWxmLmZpcnN0X2Fzc2V0X2lkLnZhbHVlID0gY3JlYXRlZC5jcmVhdGVkX2Fzc2V0LmlkCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKCm1pbnRfZnV0dXJlX25mdF9hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzMKICAgIC8vIHNlbGYubWludGVkX2Fzc2V0c1tjcmVhdGVkLmNyZWF0ZWRfYXNzZXQuaWRdID0gVUludDY0KDEpCiAgICBkaWcgMgogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBpbnRjXzEgLy8gMQogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU3LTU4CiAgICAvLyAjIE1pbnQgYSBmaXhlZCBzZXJpZXMgb2YgQVJDLTE5IHN0eWxlIE5GVHMgZnJvbSB0aGUgYXBwIGFjY291bnQuCiAgICAvLyBmb3IgaWR4IGluIHVyYW5nZSh0b3RhbF9uZnRzKToKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBtaW50X2Z1dHVyZV9uZnRfZm9yX2hlYWRlckAyCgptaW50X2Z1dHVyZV9uZnRfYWZ0ZXJfZm9yQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5idXlfbmZ0W3JvdXRpbmddKCkgLT4gdm9pZDoKYnV5X25mdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODIKICAgIC8vIGFzc2VydCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4MwogICAgLy8gYXNzZXJ0IGFzc2V0X2lkID4gVUludDY0KDApCiAgICBkaWcgMgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODQKICAgIC8vIGFzc2VydCBzZWxmLm1pbnRlZF9hc3NldHMuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkgPT0gVUludDY0KDEpCiAgICBkaWcgMgogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODgtODkKICAgIC8vICMgRW5zdXJlIGJ1eWVyIGhhcyBvcHRlZC1pbiBpbiB0aGUgc2FtZSBncm91cC4KICAgIC8vIGFzc2VydCBvcHRfaW4uc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAxCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5MAogICAgLy8gYXNzZXJ0IG9wdF9pbi5hc3NldF9yZWNlaXZlciA9PSBUeG4uc2VuZGVyCiAgICBkaWcgMQogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjkxCiAgICAvLyBhc3NlcnQgb3B0X2luLnhmZXJfYXNzZXQuaWQgPT0gYXNzZXQuaWQKICAgIGRpZyAxCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGRpZyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OTIKICAgIC8vIGFzc2VydCBvcHRfaW4uYXNzZXRfYW1vdW50ID09IFVJbnQ2NCgwKQogICAgc3dhcAogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk0CiAgICAvLyBhc3NlcnQgcGF5bWVudC5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgZHVwCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5NQogICAgLy8gYXNzZXJ0IHBheW1lbnQucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZHVwCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5NgogICAgLy8gYXNzZXJ0IHBheW1lbnQuYW1vdW50ID09IHNlbGYuc2FsZV9wcmljZS52YWx1ZQogICAgZ3R4bnMgQW1vdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAic2FsZV9wcmljZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zYWxlX3ByaWNlIGV4aXN0cwogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5OAogICAgLy8gYXBwX2JhbGFuY2UsIGFwcF9vcHRlZCA9IG9wLkFzc2V0SG9sZGluZ0dldC5hc3NldF9iYWxhbmNlKEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsIGFzc2V0KQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGRpZyAyCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5OQogICAgLy8gYXNzZXJ0IGFwcF9vcHRlZAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTAwCiAgICAvLyBhc3NlcnQgYXBwX2JhbGFuY2UgPT0gVUludDY0KDEpCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwMi0xMDgKICAgIC8vICMgVHJhbnNmZXIgTkZUIHRvIGludmVzdG9yIGFuZCBmb3J3YXJkIHBheW1lbnQgdG8gY3JlYXRvci4KICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PVVJbnQ2NCgxKSwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDUKICAgIC8vIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTA2CiAgICAvLyBhc3NldF9hbW91bnQ9VUludDY0KDEpLAogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgc3dhcAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDItMTAzCiAgICAvLyAjIFRyYW5zZmVyIE5GVCB0byBpbnZlc3RvciBhbmQgZm9yd2FyZCBwYXltZW50IHRvIGNyZWF0b3IuCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDcKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTAyLTEwOAogICAgLy8gIyBUcmFuc2ZlciBORlQgdG8gaW52ZXN0b3IgYW5kIGZvcndhcmQgcGF5bWVudCB0byBjcmVhdG9yLgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9VUludDY0KDEpLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDktMTEzCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5jcmVhdG9yLnZhbHVlLAogICAgLy8gICAgIGFtb3VudD1wYXltZW50LmFtb3VudCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMTAKICAgIC8vIHJlY2VpdmVyPXNlbGYuY3JlYXRvci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwOQogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjExMgogICAgLy8gZmVlPTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDktMTEzCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5jcmVhdG9yLnZhbHVlLAogICAgLy8gICAgIGFtb3VudD1wYXltZW50LmFtb3VudCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5yZXBvcnRfaW5jb21lW3JvdXRpbmddKCkgLT4gdm9pZDoKcmVwb3J0X2luY29tZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTE5CiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTIwCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLmNyZWF0b3IudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTIxCiAgICAvLyBhc3NlcnQgcXVhcnRlciA+IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIGRpZyAzCiAgICA8CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjIKICAgIC8vIGFzc2VydCBpbmNvbWVfYW1vdW50ID4gVUludDY0KDApCiAgICBkaWcgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTI0CiAgICAvLyB0b3RhbF9wYXlvdXQgPSAoaW5jb21lX2Ftb3VudCAqIHNlbGYudG90YWxfcGN0X2Jwcy52YWx1ZSkgLy8gVUludDY0KDEwXzAwMCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJ0b3RhbF9wY3RfYnBzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX3BjdF9icHMgZXhpc3RzCiAgICBkaWcgMgogICAgKgogICAgaW50Y18zIC8vIDEwMDAwCiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTI1CiAgICAvLyBhc3NlcnQgdG90YWxfcGF5b3V0ID4gVUludDY0KDApCiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyNy0xMjgKICAgIC8vICMgUmVxdWlyZSB0aGUgY3JlYXRvciB0byBmdW5kIHRoZSBhcHAgZm9yIHRoaXMgcXVhcnRlcidzIHBheW91dHMuCiAgICAvLyBhc3NlcnQgcGF5b3V0X2Z1bmRpbmcuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAxCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjkKICAgIC8vIGFzc2VydCBwYXlvdXRfZnVuZGluZy5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkaWcgMQogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTMwCiAgICAvLyBhc3NlcnQgcGF5b3V0X2Z1bmRpbmcuYW1vdW50ID09IHRvdGFsX3BheW91dAogICAgc3dhcAogICAgZ3R4bnMgQW1vdW50CiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzMgogICAgLy8gc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUgPSBxdWFydGVyCiAgICBieXRlY18xIC8vICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiCiAgICB1bmNvdmVyIDMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTMzCiAgICAvLyBzZWxmLmxhc3RfcmVwb3J0ZWRfaW5jb21lLnZhbHVlID0gaW5jb21lX2Ftb3VudAogICAgYnl0ZWMgMTIgLy8gImxhc3RfcmVwb3J0ZWRfaW5jb21lIgogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzNAogICAgLy8gc2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSA9IHRvdGFsX3BheW91dCAvLyBzZWxmLnRvdGFsX25mdHMudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX25mdHMgZXhpc3RzCiAgICAvCiAgICBieXRlYyA1IC8vICJwYXlvdXRfcGVyX25mdCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuY2xhaW1fcGF5b3V0W3JvdXRpbmddKCkgLT4gdm9pZDoKY2xhaW1fcGF5b3V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTM4CiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTM5CiAgICAvLyBhc3NlcnQgYXNzZXRfaWQgPiBVSW50NjQoMCkKICAgIGR1cAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQwCiAgICAvLyBhc3NlcnQgc2VsZi5taW50ZWRfYXNzZXRzLmdldChhc3NldF9pZCwgZGVmYXVsdD1VSW50NjQoMCkpID09IFVJbnQ2NCgxKQogICAgZHVwCiAgICBpdG9iCiAgICBieXRlYyA3IC8vICJtYV8iCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQxCiAgICAvLyBhc3NlcnQgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUgPiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyIGV4aXN0cwogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDMKICAgIC8vIGhvbGRlcl9iYWxhbmNlLCBob2xkZXJfb3B0ZWQgPSBvcC5Bc3NldEhvbGRpbmdHZXQuYXNzZXRfYmFsYW5jZShUeG4uc2VuZGVyLCBBc3NldChhc3NldF9pZCkpCiAgICB0eG4gU2VuZGVyCiAgICB1bmNvdmVyIDMKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0NAogICAgLy8gYXNzZXJ0IGhvbGRlcl9vcHRlZAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQ1CiAgICAvLyBhc3NlcnQgaG9sZGVyX2JhbGFuY2UgPT0gVUludDY0KDEpCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0NwogICAgLy8gY2xhaW1lZCA9IHNlbGYubGFzdF9jbGFpbWVkX3F1YXJ0ZXIuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkKICAgIGJ5dGVjIDEzIC8vICJsY18iCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDgKICAgIC8vIGFzc2VydCBjbGFpbWVkIDwgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUKICAgIGRpZyAyCiAgICA8CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDkKICAgIC8vIGFzc2VydCBzZWxmLnBheW91dF9wZXJfbmZ0LnZhbHVlID4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAicGF5b3V0X3Blcl9uZnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucGF5b3V0X3Blcl9uZnQgZXhpc3RzCiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MS0xNTUKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICBhbW91bnQ9c2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MwogICAgLy8gcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTUxCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU0CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MS0xNTUKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICBhbW91bnQ9c2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTcKICAgIC8vIHNlbGYubGFzdF9jbGFpbWVkX3F1YXJ0ZXJbYXNzZXRfaWRdID0gc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUKICAgIHN3YXAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfcGVuZGluZ19wYXlvdXQ6CiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNjEKICAgIC8vIGFzc2VydCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNjIKICAgIC8vIGFzc2VydCBhc3NldF9pZCA+IFVJbnQ2NCgwKQogICAgZGlnIDEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE2MwogICAgLy8gYXNzZXJ0IHNlbGYubWludGVkX2Fzc2V0cy5nZXQoYXNzZXRfaWQsIGRlZmF1bHQ9VUludDY0KDApKSA9PSBVSW50NjQoMSkKICAgIHN3YXAKICAgIGl0b2IKICAgIGR1cAogICAgY292ZXIgMgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY0CiAgICAvLyBhc3NlcnQgYWRkcmVzcyAhPSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNjYKICAgIC8vIGlmIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlID09IFVJbnQ2NCgwKToKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyIGV4aXN0cwogICAgYm56IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNjcKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCgpnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3BlbmRpbmdfcGF5b3V0QDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBpdG9iCiAgICBieXRlYyAxNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNjkKICAgIC8vIGhvbGRlcl9iYWxhbmNlLCBob2xkZXJfb3B0ZWQgPSBvcC5Bc3NldEhvbGRpbmdHZXQuYXNzZXRfYmFsYW5jZShhZGRyZXNzLCBBc3NldChhc3NldF9pZCkpCiAgICBkaWcgMQogICAgZGlnIDMKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgc3dhcAogICAgYnVyeSA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTcwCiAgICAvLyBpZiBub3QgaG9sZGVyX29wdGVkOgogICAgYm56IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzEKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzIKICAgIC8vIGlmIGhvbGRlcl9iYWxhbmNlICE9IFVJbnQ2NCgxKToKICAgIGRpZyAzCiAgICBpbnRjXzEgLy8gMQogICAgIT0KICAgIGJ6IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzMKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzUKICAgIC8vIGNsYWltZWQgPSBzZWxmLmxhc3RfY2xhaW1lZF9xdWFydGVyLmdldChhc3NldF9pZCwgZGVmYXVsdD1VSW50NjQoMCkpCiAgICBieXRlYyAxMyAvLyAibGNfIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTc2CiAgICAvLyBpZiBjbGFpbWVkIDwgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWU6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIDwKICAgIGJ6IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzcKICAgIC8vIHJldHVybiBzZWxmLnBheW91dF9wZXJfbmZ0LnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAicGF5b3V0X3Blcl9uZnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucGF5b3V0X3Blcl9uZnQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzgKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfdGVybXNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfdGVybXM6CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE4NS0xODcKICAgIC8vICMgTXVzdCBiZSBzYWZlIHRvIGNhbGwgYmVmb3JlIG1pbnRpbmcvaW5pdGlhbGl6YXRpb24gKFVJIGNhbGxzIHRoaXMgYWZ0ZXIgZGVwbG95KS4KICAgIC8vICMgUmV0dXJuIHplcm8vZGVmYXVsdCB2YWx1ZXMgdW50aWwgaW5pdGlhbGl6ZWQuCiAgICAvLyBpZiBub3Qgc2VsZi5pbml0aWFsaXplZC52YWx1ZToKICAgIGR1cAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBibnogZ2V0X3Rlcm1zX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE4OQogICAgLy8gR2xvYmFsLnplcm9fYWRkcmVzcywKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTkwCiAgICAvLyBVSW50NjQoMCksCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE5MS0xOTUKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIGR1cG4gNQoKZ2V0X3Rlcm1zX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF90ZXJtc0A0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB1bmNvdmVyIDUKICAgIGl0b2IKICAgIGRpZyA2CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgNQogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDE0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpnZXRfdGVybXNfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE5OAogICAgLy8gc2VsZi5jcmVhdG9yLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImNyZWF0b3IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY3JlYXRvciBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTkKICAgIC8vIHNlbGYudG90YWxfbmZ0cy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX25mdHMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjAwCiAgICAvLyBzZWxmLnRvdGFsX3BjdF9icHMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9wY3RfYnBzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwMQogICAgLy8gc2VsZi5kdXJhdGlvbl95ZWFycy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJkdXJhdGlvbl95ZWFycyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kdXJhdGlvbl95ZWFycyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDIKICAgIC8vIHNlbGYuc3RhcnRfcXVhcnRlci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA5IC8vICJzdGFydF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXJ0X3F1YXJ0ZXIgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjAzCiAgICAvLyBzZWxmLnNhbGVfcHJpY2UudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAic2FsZV9wcmljZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zYWxlX3ByaWNlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwNAogICAgLy8gc2VsZi5maXJzdF9hc3NldF9pZC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZmlyc3RfYXNzZXRfaWQgZXhpc3RzCiAgICB1bmNvdmVyIDYKICAgIGJ1cnkgNwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF90ZXJtc19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfdGVybXNANAo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCAxMDAwCiAgICBieXRlY2Jsb2NrICJpbml0aWFsaXplZCIgImxhc3RfcmVwb3J0ZWRfcXVhcnRlciIgInRvdGFsX25mdHMiICJ0b3RhbF9wY3RfYnBzIiAic2FsZV9wcmljZSIgInBheW91dF9wZXJfbmZ0IiAiY3JlYXRvciIgIm1hXyIgImR1cmF0aW9uX3llYXJzIiAic3RhcnRfcXVhcnRlciIgImZpcnN0X2Fzc2V0X2lkIiAicGN0X3Blcl9uZnRfYnBzIiAibGFzdF9yZXBvcnRlZF9pbmNvbWUiICJsY18iIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4CiAgICAvLyBzZWxmLnRvdGFsX25mdHMgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OQogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwCiAgICAvLyBzZWxmLmR1cmF0aW9uX3llYXJzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgOCAvLyAiZHVyYXRpb25feWVhcnMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMQogICAgLy8gc2VsZi5zdGFydF9xdWFydGVyID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyCiAgICAvLyBzZWxmLnNhbGVfcHJpY2UgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyA0IC8vICJzYWxlX3ByaWNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTMKICAgIC8vIHNlbGYuZmlyc3RfYXNzZXRfaWQgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNAogICAgLy8gc2VsZi5wY3RfcGVyX25mdF9icHMgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMSAvLyAicGN0X3Blcl9uZnRfYnBzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTUKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTYKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9pbmNvbWUgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMiAvLyAibGFzdF9yZXBvcnRlZF9pbmNvbWUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNwogICAgLy8gc2VsZi5wYXlvdXRfcGVyX25mdCA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjIDUgLy8gInBheW91dF9wZXJfbmZ0IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTgKICAgIC8vIHNlbGYuaW5pdGlhbGl6ZWQgPSBHbG9iYWxTdGF0ZShGYWxzZSkKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo0CiAgICAvLyBjbGFzcyBBbGdvbWludChBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTUKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweGFjNmUxYTA0IDB4ZGQ5ODBlNmQgMHhiZDhkYzk3ZSAweDk0NWYxNzc3IDB4NTczNzcxNzggMHhiZWZjMTZjNSAvLyBtZXRob2QgIm1pbnRfZnV0dXJlX25mdCh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHBheSl2b2lkIiwgbWV0aG9kICJidXlfbmZ0KHVpbnQ2NCxheGZlcixwYXkpdm9pZCIsIG1ldGhvZCAicmVwb3J0X2luY29tZSh1aW50NjQsdWludDY0LHBheSl2b2lkIiwgbWV0aG9kICJjbGFpbV9wYXlvdXQodWludDY0KXZvaWQiLCBtZXRob2QgImdldF9wZW5kaW5nX3BheW91dCh1aW50NjQsYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgImdldF90ZXJtcygpKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWludF9mdXR1cmVfbmZ0IGJ1eV9uZnQgcmVwb3J0X2luY29tZSBjbGFpbV9wYXlvdXQgZ2V0X3BlbmRpbmdfcGF5b3V0IGdldF90ZXJtcwogICAgZXJyCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDE1OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQubWludF9mdXR1cmVfbmZ0W3JvdXRpbmddKCkgLT4gdm9pZDoKbWludF9mdXR1cmVfbmZ0OgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozNQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozNgogICAgLy8gYXNzZXJ0IHRvdGFsX25mdHMgPiBVSW50NjQoMCkKICAgIGRpZyA1CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozNwogICAgLy8gYXNzZXJ0IHRvdGFsX3BjdF9icHMgPiBVSW50NjQoMCkKICAgIGRpZyA0CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozOAogICAgLy8gYXNzZXJ0IHRvdGFsX3BjdF9icHMgPD0gVUludDY0KDEwXzAwMCkKICAgIGRpZyA0CiAgICBwdXNoaW50IDEwMDAwCiAgICA8PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MzkKICAgIC8vIGFzc2VydCBkdXJhdGlvbl95ZWFycyA+IFVJbnQ2NCgwKQogICAgZGlnIDMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQwCiAgICAvLyBhc3NlcnQgc3RhcnRfcXVhcnRlciA+IFVJbnQ2NCgwKQogICAgZGlnIDIKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBhc3NlcnQgc2FsZV9wcmljZSA+IFVJbnQ2NCgwKQogICAgZGlnIDEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQzCiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGR1cAogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDQKICAgIC8vIGFzc2VydCBtYnJfcGF5bWVudC5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQ1LTQ2CiAgICAvLyAjIE5PVEU6IEV4YWN0IE1CUiBkZXBlbmRzIG9uIHByb3RvY29sIHBhcmFtczsgcmVxdWlyZSBhIHNlbnNpYmxlIG1pbmltdW0gZm9yIGRlbW8uCiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQuYW1vdW50ID49IFVJbnQ2NCgxXzAwMF8wMDApCiAgICBndHhucyBBbW91bnQKICAgIHB1c2hpbnQgMTAwMDAwMAogICAgPj0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQ4CiAgICAvLyBzZWxmLmNyZWF0b3IudmFsdWUgPSBUeG4uc2VuZGVyCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo0OQogICAgLy8gc2VsZi50b3RhbF9uZnRzLnZhbHVlID0gdG90YWxfbmZ0cwogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIHVuY292ZXIgNQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MAogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlID0gdG90YWxfcGN0X2JwcwogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIHVuY292ZXIgNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MQogICAgLy8gc2VsZi5kdXJhdGlvbl95ZWFycy52YWx1ZSA9IGR1cmF0aW9uX3llYXJzCiAgICBieXRlYyA4IC8vICJkdXJhdGlvbl95ZWFycyIKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MgogICAgLy8gc2VsZi5zdGFydF9xdWFydGVyLnZhbHVlID0gc3RhcnRfcXVhcnRlcgogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MwogICAgLy8gc2VsZi5zYWxlX3ByaWNlLnZhbHVlID0gc2FsZV9wcmljZQogICAgYnl0ZWMgNCAvLyAic2FsZV9wcmljZSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTQKICAgIC8vIHNlbGYucGN0X3Blcl9uZnRfYnBzLnZhbHVlID0gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlIC8vIHNlbGYudG90YWxfbmZ0cy52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInRvdGFsX3BjdF9icHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfcGN0X2JwcyBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX25mdHMgZXhpc3RzCiAgICAvCiAgICBieXRlYyAxMSAvLyAicGN0X3Blcl9uZnRfYnBzIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1NQogICAgLy8gc2VsZi5pbml0aWFsaXplZC52YWx1ZSA9IFRydWUKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTctNTgKICAgIC8vICMgTWludCBhIGZpeGVkIHNlcmllcyBvZiBBUkMtMTkgc3R5bGUgTkZUcyBmcm9tIHRoZSBhcHAgYWNjb3VudC4KICAgIC8vIGZvciBpZHggaW4gdXJhbmdlKHRvdGFsX25mdHMpOgogICAgaW50Y18wIC8vIDAKCm1pbnRfZnV0dXJlX25mdF9mb3JfaGVhZGVyQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTctNTgKICAgIC8vICMgTWludCBhIGZpeGVkIHNlcmllcyBvZiBBUkMtMTkgc3R5bGUgTkZUcyBmcm9tIHRoZSBhcHAgYWNjb3VudC4KICAgIC8vIGZvciBpZHggaW4gdXJhbmdlKHRvdGFsX25mdHMpOgogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogbWludF9mdXR1cmVfbmZ0X2FmdGVyX2ZvckA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTktNzAKICAgIC8vIGNyZWF0ZWQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIHRvdGFsPTEsCiAgICAvLyAgICAgZGVjaW1hbHM9MCwKICAgIC8vICAgICBkZWZhdWx0X2Zyb3plbj1GYWxzZSwKICAgIC8vICAgICBhc3NldF9uYW1lPWIiRnV0dXJlIEVhcm5pbmcgTkZUIiwKICAgIC8vICAgICB1bml0X25hbWU9YiJGRU5GVCIsCiAgICAvLyAgICAgIyBBUkMtMTkgdGVtcGxhdGUgVVJMIChDSUQgc291cmNlZCBmcm9tIHJlc2VydmUgYWNjb3VudCBieSBjbGllbnRzKS4KICAgIC8vICAgICB1cmw9YiJ0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn0iLAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPTEwMDAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjcKICAgIC8vIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjgKICAgIC8vIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGR1cAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjUtNjYKICAgIC8vICMgQVJDLTE5IHRlbXBsYXRlIFVSTCAoQ0lEIHNvdXJjZWQgZnJvbSByZXNlcnZlIGFjY291bnQgYnkgY2xpZW50cykuCiAgICAvLyB1cmw9YiJ0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn0iLAogICAgcHVzaGJ5dGVzIDB4NzQ2NTZkNzA2YzYxNzQ2NTJkNjk3MDY2NzMzYTJmMmY3YjY5NzA2NjczNjM2OTY0M2EzMTNhNzI2MTc3M2E3MjY1NzM2NTcyNzY2NTNhNzM2ODYxMzIyZDMyMzUzNjdkCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjQKICAgIC8vIHVuaXRfbmFtZT1iIkZFTkZUIiwKICAgIHB1c2hieXRlcyAweDQ2NDU0ZTQ2NTQKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjYzCiAgICAvLyBhc3NldF9uYW1lPWIiRnV0dXJlIEVhcm5pbmcgTkZUIiwKICAgIHB1c2hieXRlcyAweDQ2NzU3NDc1NzI2NTIwNDU2MTcyNmU2OTZlNjcyMDRlNDY1NAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MgogICAgLy8gZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlZmF1bHRGcm96ZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MQogICAgLy8gZGVjaW1hbHM9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MAogICAgLy8gdG90YWw9MSwKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1OQogICAgLy8gY3JlYXRlZCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjY5CiAgICAvLyBmZWU9MTAwMCwKICAgIGludGNfMyAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU5LTcwCiAgICAvLyBjcmVhdGVkID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD0xLAogICAgLy8gICAgIGRlY2ltYWxzPTAsCiAgICAvLyAgICAgZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICAvLyAgICAgYXNzZXRfbmFtZT1iIkZ1dHVyZSBFYXJuaW5nIE5GVCIsCiAgICAvLyAgICAgdW5pdF9uYW1lPWIiRkVORlQiLAogICAgLy8gICAgICMgQVJDLTE5IHRlbXBsYXRlIFVSTCAoQ0lEIHNvdXJjZWQgZnJvbSByZXNlcnZlIGFjY291bnQgYnkgY2xpZW50cykuCiAgICAvLyAgICAgdXJsPWIidGVtcGxhdGUtaXBmczovL3tpcGZzY2lkOjE6cmF3OnJlc2VydmU6c2hhMi0yNTZ9IiwKICAgIC8vICAgICBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIGJ1cnkgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjcxCiAgICAvLyBpZiBpZHggPT0gVUludDY0KDApOgogICAgZHVwCiAgICBibnogbWludF9mdXR1cmVfbmZ0X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjcyCiAgICAvLyBzZWxmLmZpcnN0X2Fzc2V0X2lkLnZhbHVlID0gY3JlYXRlZC5jcmVhdGVkX2Fzc2V0LmlkCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKCm1pbnRfZnV0dXJlX25mdF9hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzMKICAgIC8vIHNlbGYubWludGVkX2Fzc2V0c1tjcmVhdGVkLmNyZWF0ZWRfYXNzZXQuaWRdID0gVUludDY0KDEpCiAgICBkaWcgMgogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBpbnRjXzEgLy8gMQogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU3LTU4CiAgICAvLyAjIE1pbnQgYSBmaXhlZCBzZXJpZXMgb2YgQVJDLTE5IHN0eWxlIE5GVHMgZnJvbSB0aGUgYXBwIGFjY291bnQuCiAgICAvLyBmb3IgaWR4IGluIHVyYW5nZSh0b3RhbF9uZnRzKToKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBtaW50X2Z1dHVyZV9uZnRfZm9yX2hlYWRlckAyCgptaW50X2Z1dHVyZV9uZnRfYWZ0ZXJfZm9yQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5idXlfbmZ0W3JvdXRpbmddKCkgLT4gdm9pZDoKYnV5X25mdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODIKICAgIC8vIGFzc2VydCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4MwogICAgLy8gYXNzZXJ0IGFzc2V0X2lkID4gVUludDY0KDApCiAgICBkaWcgMgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODQKICAgIC8vIGFzc2VydCBzZWxmLm1pbnRlZF9hc3NldHMuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkgPT0gVUludDY0KDEpCiAgICBkaWcgMgogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODgtODkKICAgIC8vICMgRW5zdXJlIGJ1eWVyIGhhcyBvcHRlZC1pbiBpbiB0aGUgc2FtZSBncm91cC4KICAgIC8vIGFzc2VydCBvcHRfaW4uc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAxCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5MAogICAgLy8gYXNzZXJ0IG9wdF9pbi5hc3NldF9yZWNlaXZlciA9PSBUeG4uc2VuZGVyCiAgICBkaWcgMQogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjkxCiAgICAvLyBhc3NlcnQgb3B0X2luLnhmZXJfYXNzZXQuaWQgPT0gYXNzZXQuaWQKICAgIGRpZyAxCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGRpZyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OTIKICAgIC8vIGFzc2VydCBvcHRfaW4uYXNzZXRfYW1vdW50ID09IFVJbnQ2NCgwKQogICAgc3dhcAogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk0CiAgICAvLyBhc3NlcnQgcGF5bWVudC5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgZHVwCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5NQogICAgLy8gYXNzZXJ0IHBheW1lbnQucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZHVwCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5NgogICAgLy8gYXNzZXJ0IHBheW1lbnQuYW1vdW50ID09IHNlbGYuc2FsZV9wcmljZS52YWx1ZQogICAgZ3R4bnMgQW1vdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAic2FsZV9wcmljZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zYWxlX3ByaWNlIGV4aXN0cwogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5OAogICAgLy8gYXBwX2JhbGFuY2UsIGFwcF9vcHRlZCA9IG9wLkFzc2V0SG9sZGluZ0dldC5hc3NldF9iYWxhbmNlKEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsIGFzc2V0KQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGRpZyAyCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5OQogICAgLy8gYXNzZXJ0IGFwcF9vcHRlZAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTAwCiAgICAvLyBhc3NlcnQgYXBwX2JhbGFuY2UgPT0gVUludDY0KDEpCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwMi0xMDgKICAgIC8vICMgVHJhbnNmZXIgTkZUIHRvIGludmVzdG9yIGFuZCBmb3J3YXJkIHBheW1lbnQgdG8gY3JlYXRvci4KICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PVVJbnQ2NCgxKSwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDUKICAgIC8vIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTA2CiAgICAvLyBhc3NldF9hbW91bnQ9VUludDY0KDEpLAogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgc3dhcAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDItMTAzCiAgICAvLyAjIFRyYW5zZmVyIE5GVCB0byBpbnZlc3RvciBhbmQgZm9yd2FyZCBwYXltZW50IHRvIGNyZWF0b3IuCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDcKICAgIC8vIGZlZT0xMDAwLAogICAgaW50Y18zIC8vIDEwMDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTAyLTEwOAogICAgLy8gIyBUcmFuc2ZlciBORlQgdG8gaW52ZXN0b3IgYW5kIGZvcndhcmQgcGF5bWVudCB0byBjcmVhdG9yLgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9VUludDY0KDEpLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDktMTEzCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5jcmVhdG9yLnZhbHVlLAogICAgLy8gICAgIGFtb3VudD1wYXltZW50LmFtb3VudCwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMTAKICAgIC8vIHJlY2VpdmVyPXNlbGYuY3JlYXRvci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwOQogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjExMgogICAgLy8gZmVlPTEwMDAsCiAgICBpbnRjXzMgLy8gMTAwMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDktMTEzCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5jcmVhdG9yLnZhbHVlLAogICAgLy8gICAgIGFtb3VudD1wYXltZW50LmFtb3VudCwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5yZXBvcnRfaW5jb21lW3JvdXRpbmddKCkgLT4gdm9pZDoKcmVwb3J0X2luY29tZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTE5CiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTIwCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLmNyZWF0b3IudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTIxCiAgICAvLyBhc3NlcnQgcXVhcnRlciA+IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIGRpZyAzCiAgICA8CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjIKICAgIC8vIGFzc2VydCBpbmNvbWVfYW1vdW50ID4gVUludDY0KDApCiAgICBkaWcgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTI0CiAgICAvLyB0b3RhbF9wYXlvdXQgPSAoaW5jb21lX2Ftb3VudCAqIHNlbGYudG90YWxfcGN0X2Jwcy52YWx1ZSkgLy8gVUludDY0KDEwXzAwMCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJ0b3RhbF9wY3RfYnBzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX3BjdF9icHMgZXhpc3RzCiAgICBkaWcgMgogICAgKgogICAgcHVzaGludCAxMDAwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyNQogICAgLy8gYXNzZXJ0IHRvdGFsX3BheW91dCA+IFVJbnQ2NCgwKQogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjctMTI4CiAgICAvLyAjIFJlcXVpcmUgdGhlIGNyZWF0b3IgdG8gZnVuZCB0aGUgYXBwIGZvciB0aGlzIHF1YXJ0ZXIncyBwYXlvdXRzLgogICAgLy8gYXNzZXJ0IHBheW91dF9mdW5kaW5nLnNlbmRlciA9PSBUeG4uc2VuZGVyCiAgICBkaWcgMQogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTI5CiAgICAvLyBhc3NlcnQgcGF5b3V0X2Z1bmRpbmcucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZGlnIDEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzMAogICAgLy8gYXNzZXJ0IHBheW91dF9mdW5kaW5nLmFtb3VudCA9PSB0b3RhbF9wYXlvdXQKICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzIKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlID0gcXVhcnRlcgogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzMwogICAgLy8gc2VsZi5sYXN0X3JlcG9ydGVkX2luY29tZS52YWx1ZSA9IGluY29tZV9hbW91bnQKICAgIGJ5dGVjIDEyIC8vICJsYXN0X3JlcG9ydGVkX2luY29tZSIKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzQKICAgIC8vIHNlbGYucGF5b3V0X3Blcl9uZnQudmFsdWUgPSB0b3RhbF9wYXlvdXQgLy8gc2VsZi50b3RhbF9uZnRzLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9uZnRzIGV4aXN0cwogICAgLwogICAgYnl0ZWMgNSAvLyAicGF5b3V0X3Blcl9uZnQiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjExNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmNsYWltX3BheW91dFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsYWltX3BheW91dDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzOAogICAgLy8gYXNzZXJ0IHNlbGYuaW5pdGlhbGl6ZWQudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJpbml0aWFsaXplZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbml0aWFsaXplZCBleGlzdHMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzOQogICAgLy8gYXNzZXJ0IGFzc2V0X2lkID4gVUludDY0KDApCiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0MAogICAgLy8gYXNzZXJ0IHNlbGYubWludGVkX2Fzc2V0cy5nZXQoYXNzZXRfaWQsIGRlZmF1bHQ9VUludDY0KDApKSA9PSBVSW50NjQoMSkKICAgIGR1cAogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0MQogICAgLy8gYXNzZXJ0IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlID4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIGR1cAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQzCiAgICAvLyBob2xkZXJfYmFsYW5jZSwgaG9sZGVyX29wdGVkID0gb3AuQXNzZXRIb2xkaW5nR2V0LmFzc2V0X2JhbGFuY2UoVHhuLnNlbmRlciwgQXNzZXQoYXNzZXRfaWQpKQogICAgdHhuIFNlbmRlcgogICAgdW5jb3ZlciAzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDQKICAgIC8vIGFzc2VydCBob2xkZXJfb3B0ZWQKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0NQogICAgLy8gYXNzZXJ0IGhvbGRlcl9iYWxhbmNlID09IFVJbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDcKICAgIC8vIGNsYWltZWQgPSBzZWxmLmxhc3RfY2xhaW1lZF9xdWFydGVyLmdldChhc3NldF9pZCwgZGVmYXVsdD1VSW50NjQoMCkpCiAgICBieXRlYyAxMyAvLyAibGNfIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQ4CiAgICAvLyBhc3NlcnQgY2xhaW1lZCA8IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlCiAgICBkaWcgMgogICAgPAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQ5CiAgICAvLyBhc3NlcnQgc2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSA+IFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInBheW91dF9wZXJfbmZ0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnBheW91dF9wZXJfbmZ0IGV4aXN0cwogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTEtMTU1CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgYW1vdW50PXNlbGYucGF5b3V0X3Blcl9uZnQudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTMKICAgIC8vIHJlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MQogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1NAogICAgLy8gZmVlPTEwMDAsCiAgICBpbnRjXzMgLy8gMTAwMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTEtMTU1CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgYW1vdW50PXNlbGYucGF5b3V0X3Blcl9uZnQudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU3CiAgICAvLyBzZWxmLmxhc3RfY2xhaW1lZF9xdWFydGVyW2Fzc2V0X2lkXSA9IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlCiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTM2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3BlbmRpbmdfcGF5b3V0W3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3BlbmRpbmdfcGF5b3V0OgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTYxCiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTYyCiAgICAvLyBhc3NlcnQgYXNzZXRfaWQgPiBVSW50NjQoMCkKICAgIGRpZyAxCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNjMKICAgIC8vIGFzc2VydCBzZWxmLm1pbnRlZF9hc3NldHMuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkgPT0gVUludDY0KDEpCiAgICBzd2FwCiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJ5dGVjIDcgLy8gIm1hXyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE2NAogICAgLy8gYXNzZXJ0IGFkZHJlc3MgIT0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY2CiAgICAvLyBpZiBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlci52YWx1ZSA9PSBVSW50NjQoMCk6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIGJueiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY3CiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgaXRvYgogICAgYnl0ZWMgMTQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY5CiAgICAvLyBob2xkZXJfYmFsYW5jZSwgaG9sZGVyX29wdGVkID0gb3AuQXNzZXRIb2xkaW5nR2V0LmFzc2V0X2JhbGFuY2UoYWRkcmVzcywgQXNzZXQoYXNzZXRfaWQpKQogICAgZGlnIDEKICAgIGRpZyAzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIHN3YXAKICAgIGJ1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE3MAogICAgLy8gaWYgbm90IGhvbGRlcl9vcHRlZDoKICAgIGJueiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTcxCiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTcyCiAgICAvLyBpZiBob2xkZXJfYmFsYW5jZSAhPSBVSW50NjQoMSk6CiAgICBkaWcgMwogICAgaW50Y18xIC8vIDEKICAgICE9CiAgICBieiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTczCiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTc1CiAgICAvLyBjbGFpbWVkID0gc2VsZi5sYXN0X2NsYWltZWRfcXVhcnRlci5nZXQoYXNzZXRfaWQsIGRlZmF1bHQ9VUludDY0KDApKQogICAgYnl0ZWMgMTMgLy8gImxjXyIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE3NgogICAgLy8gaWYgY2xhaW1lZCA8IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImxhc3RfcmVwb3J0ZWRfcXVhcnRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIgZXhpc3RzCiAgICA8CiAgICBieiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTc3CiAgICAvLyByZXR1cm4gc2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInBheW91dF9wZXJfbmZ0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnBheW91dF9wZXJfbmZ0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTc4CiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3Rlcm1zW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3Rlcm1zOgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODUtMTg3CiAgICAvLyAjIE11c3QgYmUgc2FmZSB0byBjYWxsIGJlZm9yZSBtaW50aW5nL2luaXRpYWxpemF0aW9uIChVSSBjYWxscyB0aGlzIGFmdGVyIGRlcGxveSkuCiAgICAvLyAjIFJldHVybiB6ZXJvL2RlZmF1bHQgdmFsdWVzIHVudGlsIGluaXRpYWxpemVkLgogICAgLy8gaWYgbm90IHNlbGYuaW5pdGlhbGl6ZWQudmFsdWU6CiAgICBkdXAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYm56IGdldF90ZXJtc19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODkKICAgIC8vIEdsb2JhbC56ZXJvX2FkZHJlc3MsCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE5MAogICAgLy8gVUludDY0KDApLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTEtMTk1CiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICBkdXBuIDUKCmdldF90ZXJtc19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfdGVybXNANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdW5jb3ZlciA1CiAgICBpdG9iCiAgICBkaWcgNgogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDUKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyAxNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZ2V0X3Rlcm1zX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTgKICAgIC8vIHNlbGYuY3JlYXRvci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTk5CiAgICAvLyBzZWxmLnRvdGFsX25mdHMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9uZnRzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwMAogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInRvdGFsX3BjdF9icHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfcGN0X2JwcyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDEKICAgIC8vIHNlbGYuZHVyYXRpb25feWVhcnMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiZHVyYXRpb25feWVhcnMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZHVyYXRpb25feWVhcnMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjAyCiAgICAvLyBzZWxmLnN0YXJ0X3F1YXJ0ZXIudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGFydF9xdWFydGVyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwMwogICAgLy8gc2VsZi5zYWxlX3ByaWNlLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gInNhbGVfcHJpY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2FsZV9wcmljZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDQKICAgIC8vIHNlbGYuZmlyc3RfYXNzZXRfaWQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gImZpcnN0X2Fzc2V0X2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmZpcnN0X2Fzc2V0X2lkIGV4aXN0cwogICAgdW5jb3ZlciA2CiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfdGVybXNfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3Rlcm1zQDQK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CyAEAAEIkE4mDwtpbml0aWFsaXplZBVsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIKdG90YWxfbmZ0cw10b3RhbF9wY3RfYnBzCnNhbGVfcHJpY2UOcGF5b3V0X3Blcl9uZnQHY3JlYXRvcgNtYV8OZHVyYXRpb25feWVhcnMNc3RhcnRfcXVhcnRlcg5maXJzdF9hc3NldF9pZA9wY3RfcGVyX25mdF9icHMUbGFzdF9yZXBvcnRlZF9pbmNvbWUDbGNfBBUffHUxGEAAKCoiZysiZycIImcnCSJnJwQiZycKImcnCyJnKSJnJwwiZycFImcoImcxG0EAOTEZFEQxGESCBgSsbhoEBN2YDm0EvY3JfgSUXxd3BFc3cXgEvvwWxTYaAI4GAAkBMwHSAj0CmwMfADEZFDEYFBBDgAA2GgFJFSQSRBdJNhoCSRUkEkQXNhoDSRUkEkQXNhoESRUkEkQXNhoFSRUkEkQXMRYjCUk4ECMSRCIoZUQUREsFREsEREsEJQ5ESwNESwJESwFESTgAMQASREk4BzIKEkQ4CIHAhD0PRCcGMQBnKk8FZytPBGcnCE8DZycJTwJnJwRMZyIrZUQiKmVECicLTGcoI2ciSUsCDEEAi7EyCkmyKrIpgDB0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn2yJ4AFRkVORlSyJYASRnV0dXJlIEVhcm5pbmcgTkZUsiYisiQisiMjsiKBA7IQIrIBs7Q8RQNJQAAFJwpLA2dLAhYnB0xQIxa/SSMIRQFC/24jQzYaAUkVJBJEFzEWgQIJSTgQgQQSRDEWIwlJOBAjEkQiKGVEREsCREsCFicHTFC+TBciTE8CTSMSREsBOAAxABJESwE4FDEAEkRLATgRSwMSREw4EhRESTgAMQASREk4BzIKEkQ4CCInBGVESwESRDIKSwJwAEQjEkSxMQAjshKyFEyyEYEEshAisgGzsSInBmVEsgeyCCOyECKyAbMjQzYaAUkVJBJEFzYaAkkVJBJEFzEWIwlJOBAjEkQiKGVERDEAIicGZUQSRCIpZURLAwxESwFEIitlREsCCyUKSURLATgAMQASREsBOAcyChJETDgISwESRClPA2cnDE8CZyIqZUQKJwVMZyNDNhoBSRUkEkQXIihlRERJREkWJwdLAVC+TBciTE8CTSMSRCIpZURJRDEATwNwAEQjEkQnDU8CUEm+TBciTE8CTUsCDEQiJwVlRElEsTEAsgeyCCOyECKyAbNMFr8jQ4AANhoBSRUkEkQXSTYaAklOAkkVgSASRCIoZURESwFETBZJTgInB0xQvkwXIkxPAk0jEkQyAxNEIillREAACSIWJw5MULAjQ0sBSwNwAExFBUAABCJC/+hLAyMTQQAEIkL/3ScNSwFQvkwXIkxPAk0iKWVEDEEACCInBWVEQv/AIkL/vCJJKGVEQAAoMgNFASJHBU8FFksGTFBPBRZQTwQWUE8DFlBPAhZQTBZQJw5MULAjQyInBmVEIiplRCIrZUQiJwhlRCInCWVEIicEZUQiJwplRE8GRQdC/7c=", + "approval": "CyAEAAEI6AcmDwtpbml0aWFsaXplZBVsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIKdG90YWxfbmZ0cw10b3RhbF9wY3RfYnBzCnNhbGVfcHJpY2UOcGF5b3V0X3Blcl9uZnQHY3JlYXRvcgNtYV8OZHVyYXRpb25feWVhcnMNc3RhcnRfcXVhcnRlcg5maXJzdF9hc3NldF9pZA9wY3RfcGVyX25mdF9icHMUbGFzdF9yZXBvcnRlZF9pbmNvbWUDbGNfBBUffHUxGEAAKCoiZysiZycIImcnCSJnJwQiZycKImcnCyJnKSJnJwwiZycFImcoImcxG0EAOTEZFEQxGESCBgSsbhoEBN2YDm0EvY3JfgSUXxd3BFc3cXgEvvwWxTYaAI4GAAkBNQHUAkECnwMjADEZFDEYFBBDgAA2GgFJFSQSRBdJNhoCSRUkEkQXNhoDSRUkEkQXNhoESRUkEkQXNhoFSRUkEkQXMRYjCUk4ECMSRCIoZUQUREsFREsEREsEgZBODkRLA0RLAkRLAURJOAAxABJESTgHMgoSRDgIgcCEPQ9EJwYxAGcqTwVnK08EZycITwNnJwlPAmcnBExnIitlRCIqZUQKJwtMZygjZyJJSwIMQQCLsTIKSbIqsimAMHRlbXBsYXRlLWlwZnM6Ly97aXBmc2NpZDoxOnJhdzpyZXNlcnZlOnNoYTItMjU2fbIngAVGRU5GVLIlgBJGdXR1cmUgRWFybmluZyBORlSyJiKyJCKyIyOyIoEDshAlsgGztDxFA0lAAAUnCksDZ0sCFicHTFAjFr9JIwhFAUL/biNDNhoBSRUkEkQXMRaBAglJOBCBBBJEMRYjCUk4ECMSRCIoZURESwJESwIWJwdMUL5MFyJMTwJNIxJESwE4ADEAEkRLATgUMQASREsBOBFLAxJETDgSFERJOAAxABJESTgHMgoSRDgIIicEZURLARJEMgpLAnAARCMSRLExACOyErIUTLIRgQSyECWyAbOxIicGZUSyB7III7IQJbIBsyNDNhoBSRUkEkQXNhoCSRUkEkQXMRYjCUk4ECMSRCIoZUREMQAiJwZlRBJEIillREsDDERLAUQiK2VESwILgZBOCklESwE4ADEAEkRLATgHMgoSREw4CEsBEkQpTwNnJwxPAmciKmVECicFTGcjQzYaAUkVJBJEFyIoZURESURJFicHSwFQvkwXIkxPAk0jEkQiKWVESUQxAE8DcABEIxJEJw1PAlBJvkwXIkxPAk1LAgxEIicFZURJRLExALIHsggjshAlsgGzTBa/I0OAADYaAUkVJBJEF0k2GgJJTgJJFYEgEkQiKGVEREsBREwWSU4CJwdMUL5MFyJMTwJNIxJEMgMTRCIpZURAAAkiFicOTFCwI0NLAUsDcABMRQVAAAQiQv/oSwMjE0EABCJC/90nDUsBUL5MFyJMTwJNIillRAxBAAgiJwVlREL/wCJC/7wiSShlREAAKDIDRQEiRwVPBRZLBkxQTwUWUE8EFlBPAxZQTwIWUEwWUCcOTFCwI0MiJwZlRCIqZUQiK2VEIicIZUQiJwllRCInBGVEIicKZURPBkUHQv+3", "clear": "C4EBQw==" }, "compilerInfo": { diff --git a/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/algomint_client.py b/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/algomint_client.py index 9a2f48b..07f58a4 100644 --- a/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/algomint_client.py +++ b/projects/hackalgo-contracts/smart_contracts/artifacts/algomint/algomint_client.py @@ -19,7 +19,7 @@ import algokit_utils from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "total_nfts"}, {"type": "uint64", "name": "total_pct_bps"}, {"type": "uint64", "name": "duration_years"}, {"type": "uint64", "name": "start_quarter"}, {"type": "uint64", "name": "sale_price"}, {"type": "pay", "name": "mbr_payment"}], "name": "mint_future_nft", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "asset_id"}, {"type": "axfer", "name": "opt_in"}, {"type": "pay", "name": "payment"}], "name": "buy_nft", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "quarter"}, {"type": "uint64", "name": "income_amount"}, {"type": "pay", "name": "payout_funding"}], "name": "report_income", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "asset_id"}], "name": "claim_payout", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "asset_id"}, {"type": "address", "name": "address"}], "name": "get_pending_payout", "returns": {"type": "uint64"}, "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_terms", "returns": {"type": "(address,uint64,uint64,uint64,uint64,uint64,uint64)"}, "desc": "Returns: (creator, total_nfts, total_pct_bps, duration_years, start_quarter, sale_price, first_asset_id)", "events": [], "readonly": true, "recommendations": {}}], "name": "Algomint", "state": {"keys": {"box": {}, "global": {"creator": {"key": "Y3JlYXRvcg==", "keyType": "AVMString", "valueType": "address"}, "total_nfts": {"key": "dG90YWxfbmZ0cw==", "keyType": "AVMString", "valueType": "AVMUint64"}, "total_pct_bps": {"key": "dG90YWxfcGN0X2Jwcw==", "keyType": "AVMString", "valueType": "AVMUint64"}, "duration_years": {"key": "ZHVyYXRpb25feWVhcnM=", "keyType": "AVMString", "valueType": "AVMUint64"}, "start_quarter": {"key": "c3RhcnRfcXVhcnRlcg==", "keyType": "AVMString", "valueType": "AVMUint64"}, "sale_price": {"key": "c2FsZV9wcmljZQ==", "keyType": "AVMString", "valueType": "AVMUint64"}, "first_asset_id": {"key": "Zmlyc3RfYXNzZXRfaWQ=", "keyType": "AVMString", "valueType": "AVMUint64"}, "pct_per_nft_bps": {"key": "cGN0X3Blcl9uZnRfYnBz", "keyType": "AVMString", "valueType": "AVMUint64"}, "last_reported_quarter": {"key": "bGFzdF9yZXBvcnRlZF9xdWFydGVy", "keyType": "AVMString", "valueType": "AVMUint64"}, "last_reported_income": {"key": "bGFzdF9yZXBvcnRlZF9pbmNvbWU=", "keyType": "AVMString", "valueType": "AVMUint64"}, "payout_per_nft": {"key": "cGF5b3V0X3Blcl9uZnQ=", "keyType": "AVMString", "valueType": "AVMUint64"}, "initialized": {"key": "aW5pdGlhbGl6ZWQ=", "keyType": "AVMString", "valueType": "AVMUint64"}}, "local": {}}, "maps": {"box": {"last_claimed_quarter": {"keyType": "uint64", "valueType": "uint64", "prefix": "bGNf"}, "minted_assets": {"keyType": "uint64", "valueType": "uint64", "prefix": "bWFf"}}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 1, "ints": 11}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CyAEAAEIkE4mDwtpbml0aWFsaXplZBVsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIKdG90YWxfbmZ0cw10b3RhbF9wY3RfYnBzCnNhbGVfcHJpY2UOcGF5b3V0X3Blcl9uZnQHY3JlYXRvcgNtYV8OZHVyYXRpb25feWVhcnMNc3RhcnRfcXVhcnRlcg5maXJzdF9hc3NldF9pZA9wY3RfcGVyX25mdF9icHMUbGFzdF9yZXBvcnRlZF9pbmNvbWUDbGNfBBUffHUxGEAAKCoiZysiZycIImcnCSJnJwQiZycKImcnCyJnKSJnJwwiZycFImcoImcxG0EAOTEZFEQxGESCBgSsbhoEBN2YDm0EvY3JfgSUXxd3BFc3cXgEvvwWxTYaAI4GAAkBMwHSAj0CmwMfADEZFDEYFBBDgAA2GgFJFSQSRBdJNhoCSRUkEkQXNhoDSRUkEkQXNhoESRUkEkQXNhoFSRUkEkQXMRYjCUk4ECMSRCIoZUQUREsFREsEREsEJQ5ESwNESwJESwFESTgAMQASREk4BzIKEkQ4CIHAhD0PRCcGMQBnKk8FZytPBGcnCE8DZycJTwJnJwRMZyIrZUQiKmVECicLTGcoI2ciSUsCDEEAi7EyCkmyKrIpgDB0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn2yJ4AFRkVORlSyJYASRnV0dXJlIEVhcm5pbmcgTkZUsiYisiQisiMjsiKBA7IQIrIBs7Q8RQNJQAAFJwpLA2dLAhYnB0xQIxa/SSMIRQFC/24jQzYaAUkVJBJEFzEWgQIJSTgQgQQSRDEWIwlJOBAjEkQiKGVEREsCREsCFicHTFC+TBciTE8CTSMSREsBOAAxABJESwE4FDEAEkRLATgRSwMSREw4EhRESTgAMQASREk4BzIKEkQ4CCInBGVESwESRDIKSwJwAEQjEkSxMQAjshKyFEyyEYEEshAisgGzsSInBmVEsgeyCCOyECKyAbMjQzYaAUkVJBJEFzYaAkkVJBJEFzEWIwlJOBAjEkQiKGVERDEAIicGZUQSRCIpZURLAwxESwFEIitlREsCCyUKSURLATgAMQASREsBOAcyChJETDgISwESRClPA2cnDE8CZyIqZUQKJwVMZyNDNhoBSRUkEkQXIihlRERJREkWJwdLAVC+TBciTE8CTSMSRCIpZURJRDEATwNwAEQjEkQnDU8CUEm+TBciTE8CTUsCDEQiJwVlRElEsTEAsgeyCCOyECKyAbNMFr8jQ4AANhoBSRUkEkQXSTYaAklOAkkVgSASRCIoZURESwFETBZJTgInB0xQvkwXIkxPAk0jEkQyAxNEIillREAACSIWJw5MULAjQ0sBSwNwAExFBUAABCJC/+hLAyMTQQAEIkL/3ScNSwFQvkwXIkxPAk0iKWVEDEEACCInBWVEQv/AIkL/vCJJKGVEQAAoMgNFASJHBU8FFksGTFBPBRZQTwQWUE8DFlBPAhZQTBZQJw5MULAjQyInBmVEIiplRCIrZUQiJwhlRCInCWVEIicEZUQiJwplRE8GRQdC/7c=", "clear": "C4EBQw=="}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCAxMDAwMAogICAgYnl0ZWNibG9jayAiaW5pdGlhbGl6ZWQiICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiICJ0b3RhbF9uZnRzIiAidG90YWxfcGN0X2JwcyIgInNhbGVfcHJpY2UiICJwYXlvdXRfcGVyX25mdCIgImNyZWF0b3IiICJtYV8iICJkdXJhdGlvbl95ZWFycyIgInN0YXJ0X3F1YXJ0ZXIiICJmaXJzdF9hc3NldF9pZCIgInBjdF9wZXJfbmZ0X2JwcyIgImxhc3RfcmVwb3J0ZWRfaW5jb21lIiAibGNfIiAweDE1MWY3Yzc1CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OAogICAgLy8gc2VsZi50b3RhbF9uZnRzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjkKICAgIC8vIHNlbGYudG90YWxfcGN0X2JwcyA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjXzMgLy8gInRvdGFsX3BjdF9icHMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMAogICAgLy8gc2VsZi5kdXJhdGlvbl95ZWFycyA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjIDggLy8gImR1cmF0aW9uX3llYXJzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTEKICAgIC8vIHNlbGYuc3RhcnRfcXVhcnRlciA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjIDkgLy8gInN0YXJ0X3F1YXJ0ZXIiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMgogICAgLy8gc2VsZi5zYWxlX3ByaWNlID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgNCAvLyAic2FsZV9wcmljZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzCiAgICAvLyBzZWxmLmZpcnN0X2Fzc2V0X2lkID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgMTAgLy8gImZpcnN0X2Fzc2V0X2lkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQKICAgIC8vIHNlbGYucGN0X3Blcl9uZnRfYnBzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgMTEgLy8gInBjdF9wZXJfbmZ0X2JwcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1CiAgICAvLyBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjXzEgLy8gImxhc3RfcmVwb3J0ZWRfcXVhcnRlciIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE2CiAgICAvLyBzZWxmLmxhc3RfcmVwb3J0ZWRfaW5jb21lID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgMTIgLy8gImxhc3RfcmVwb3J0ZWRfaW5jb21lIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTcKICAgIC8vIHNlbGYucGF5b3V0X3Blcl9uZnQgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyA1IC8vICJwYXlvdXRfcGVyX25mdCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE4CiAgICAvLyBzZWxmLmluaXRpYWxpemVkID0gR2xvYmFsU3RhdGUoRmFsc2UpCiAgICBieXRlY18wIC8vICJpbml0aWFsaXplZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NAogICAgLy8gY2xhc3MgQWxnb21pbnQoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDE1CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHhhYzZlMWEwNCAweGRkOTgwZTZkIDB4YmQ4ZGM5N2UgMHg5NDVmMTc3NyAweDU3Mzc3MTc4IDB4YmVmYzE2YzUgLy8gbWV0aG9kICJtaW50X2Z1dHVyZV9uZnQodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCxwYXkpdm9pZCIsIG1ldGhvZCAiYnV5X25mdCh1aW50NjQsYXhmZXIscGF5KXZvaWQiLCBtZXRob2QgInJlcG9ydF9pbmNvbWUodWludDY0LHVpbnQ2NCxwYXkpdm9pZCIsIG1ldGhvZCAiY2xhaW1fcGF5b3V0KHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRfcGVuZGluZ19wYXlvdXQodWludDY0LGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJnZXRfdGVybXMoKShhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1pbnRfZnV0dXJlX25mdCBidXlfbmZ0IHJlcG9ydF9pbmNvbWUgY2xhaW1fcGF5b3V0IGdldF9wZW5kaW5nX3BheW91dCBnZXRfdGVybXMKICAgIGVycgoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAxNToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50Lm1pbnRfZnV0dXJlX25mdFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm1pbnRfZnV0dXJlX25mdDoKICAgIHB1c2hieXRlcyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MzUKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MzYKICAgIC8vIGFzc2VydCB0b3RhbF9uZnRzID4gVUludDY0KDApCiAgICBkaWcgNQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MzcKICAgIC8vIGFzc2VydCB0b3RhbF9wY3RfYnBzID4gVUludDY0KDApCiAgICBkaWcgNAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MzgKICAgIC8vIGFzc2VydCB0b3RhbF9wY3RfYnBzIDw9IFVJbnQ2NCgxMF8wMDApCiAgICBkaWcgNAogICAgaW50Y18zIC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MzkKICAgIC8vIGFzc2VydCBkdXJhdGlvbl95ZWFycyA+IFVJbnQ2NCgwKQogICAgZGlnIDMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQwCiAgICAvLyBhc3NlcnQgc3RhcnRfcXVhcnRlciA+IFVJbnQ2NCgwKQogICAgZGlnIDIKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBhc3NlcnQgc2FsZV9wcmljZSA+IFVJbnQ2NCgwKQogICAgZGlnIDEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQzCiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGR1cAogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDQKICAgIC8vIGFzc2VydCBtYnJfcGF5bWVudC5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQ1LTQ2CiAgICAvLyAjIE5PVEU6IEV4YWN0IE1CUiBkZXBlbmRzIG9uIHByb3RvY29sIHBhcmFtczsgcmVxdWlyZSBhIHNlbnNpYmxlIG1pbmltdW0gZm9yIGRlbW8uCiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQuYW1vdW50ID49IFVJbnQ2NCgxXzAwMF8wMDApCiAgICBndHhucyBBbW91bnQKICAgIHB1c2hpbnQgMTAwMDAwMAogICAgPj0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQ4CiAgICAvLyBzZWxmLmNyZWF0b3IudmFsdWUgPSBUeG4uc2VuZGVyCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo0OQogICAgLy8gc2VsZi50b3RhbF9uZnRzLnZhbHVlID0gdG90YWxfbmZ0cwogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIHVuY292ZXIgNQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MAogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlID0gdG90YWxfcGN0X2JwcwogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIHVuY292ZXIgNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MQogICAgLy8gc2VsZi5kdXJhdGlvbl95ZWFycy52YWx1ZSA9IGR1cmF0aW9uX3llYXJzCiAgICBieXRlYyA4IC8vICJkdXJhdGlvbl95ZWFycyIKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MgogICAgLy8gc2VsZi5zdGFydF9xdWFydGVyLnZhbHVlID0gc3RhcnRfcXVhcnRlcgogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MwogICAgLy8gc2VsZi5zYWxlX3ByaWNlLnZhbHVlID0gc2FsZV9wcmljZQogICAgYnl0ZWMgNCAvLyAic2FsZV9wcmljZSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTQKICAgIC8vIHNlbGYucGN0X3Blcl9uZnRfYnBzLnZhbHVlID0gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlIC8vIHNlbGYudG90YWxfbmZ0cy52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInRvdGFsX3BjdF9icHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfcGN0X2JwcyBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX25mdHMgZXhpc3RzCiAgICAvCiAgICBieXRlYyAxMSAvLyAicGN0X3Blcl9uZnRfYnBzIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1NQogICAgLy8gc2VsZi5pbml0aWFsaXplZC52YWx1ZSA9IFRydWUKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTctNTgKICAgIC8vICMgTWludCBhIGZpeGVkIHNlcmllcyBvZiBBUkMtMTkgc3R5bGUgTkZUcyBmcm9tIHRoZSBhcHAgYWNjb3VudC4KICAgIC8vIGZvciBpZHggaW4gdXJhbmdlKHRvdGFsX25mdHMpOgogICAgaW50Y18wIC8vIDAKCm1pbnRfZnV0dXJlX25mdF9mb3JfaGVhZGVyQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTctNTgKICAgIC8vICMgTWludCBhIGZpeGVkIHNlcmllcyBvZiBBUkMtMTkgc3R5bGUgTkZUcyBmcm9tIHRoZSBhcHAgYWNjb3VudC4KICAgIC8vIGZvciBpZHggaW4gdXJhbmdlKHRvdGFsX25mdHMpOgogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogbWludF9mdXR1cmVfbmZ0X2FmdGVyX2ZvckA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTktNzAKICAgIC8vIGNyZWF0ZWQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIHRvdGFsPTEsCiAgICAvLyAgICAgZGVjaW1hbHM9MCwKICAgIC8vICAgICBkZWZhdWx0X2Zyb3plbj1GYWxzZSwKICAgIC8vICAgICBhc3NldF9uYW1lPWIiRnV0dXJlIEVhcm5pbmcgTkZUIiwKICAgIC8vICAgICB1bml0X25hbWU9YiJGRU5GVCIsCiAgICAvLyAgICAgIyBBUkMtMTkgdGVtcGxhdGUgVVJMIChDSUQgc291cmNlZCBmcm9tIHJlc2VydmUgYWNjb3VudCBieSBjbGllbnRzKS4KICAgIC8vICAgICB1cmw9YiJ0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn0iLAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjcKICAgIC8vIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjgKICAgIC8vIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGR1cAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjUtNjYKICAgIC8vICMgQVJDLTE5IHRlbXBsYXRlIFVSTCAoQ0lEIHNvdXJjZWQgZnJvbSByZXNlcnZlIGFjY291bnQgYnkgY2xpZW50cykuCiAgICAvLyB1cmw9YiJ0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn0iLAogICAgcHVzaGJ5dGVzIDB4NzQ2NTZkNzA2YzYxNzQ2NTJkNjk3MDY2NzMzYTJmMmY3YjY5NzA2NjczNjM2OTY0M2EzMTNhNzI2MTc3M2E3MjY1NzM2NTcyNzY2NTNhNzM2ODYxMzIyZDMyMzUzNjdkCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjQKICAgIC8vIHVuaXRfbmFtZT1iIkZFTkZUIiwKICAgIHB1c2hieXRlcyAweDQ2NDU0ZTQ2NTQKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjYzCiAgICAvLyBhc3NldF9uYW1lPWIiRnV0dXJlIEVhcm5pbmcgTkZUIiwKICAgIHB1c2hieXRlcyAweDQ2NzU3NDc1NzI2NTIwNDU2MTcyNmU2OTZlNjcyMDRlNDY1NAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MgogICAgLy8gZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlZmF1bHRGcm96ZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MQogICAgLy8gZGVjaW1hbHM9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MAogICAgLy8gdG90YWw9MSwKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1OQogICAgLy8gY3JlYXRlZCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjY5CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU5LTcwCiAgICAvLyBjcmVhdGVkID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD0xLAogICAgLy8gICAgIGRlY2ltYWxzPTAsCiAgICAvLyAgICAgZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICAvLyAgICAgYXNzZXRfbmFtZT1iIkZ1dHVyZSBFYXJuaW5nIE5GVCIsCiAgICAvLyAgICAgdW5pdF9uYW1lPWIiRkVORlQiLAogICAgLy8gICAgICMgQVJDLTE5IHRlbXBsYXRlIFVSTCAoQ0lEIHNvdXJjZWQgZnJvbSByZXNlcnZlIGFjY291bnQgYnkgY2xpZW50cykuCiAgICAvLyAgICAgdXJsPWIidGVtcGxhdGUtaXBmczovL3tpcGZzY2lkOjE6cmF3OnJlc2VydmU6c2hhMi0yNTZ9IiwKICAgIC8vICAgICBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIGJ1cnkgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjcxCiAgICAvLyBpZiBpZHggPT0gVUludDY0KDApOgogICAgZHVwCiAgICBibnogbWludF9mdXR1cmVfbmZ0X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjcyCiAgICAvLyBzZWxmLmZpcnN0X2Fzc2V0X2lkLnZhbHVlID0gY3JlYXRlZC5jcmVhdGVkX2Fzc2V0LmlkCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKCm1pbnRfZnV0dXJlX25mdF9hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzMKICAgIC8vIHNlbGYubWludGVkX2Fzc2V0c1tjcmVhdGVkLmNyZWF0ZWRfYXNzZXQuaWRdID0gVUludDY0KDEpCiAgICBkaWcgMgogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBpbnRjXzEgLy8gMQogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU3LTU4CiAgICAvLyAjIE1pbnQgYSBmaXhlZCBzZXJpZXMgb2YgQVJDLTE5IHN0eWxlIE5GVHMgZnJvbSB0aGUgYXBwIGFjY291bnQuCiAgICAvLyBmb3IgaWR4IGluIHVyYW5nZSh0b3RhbF9uZnRzKToKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBtaW50X2Z1dHVyZV9uZnRfZm9yX2hlYWRlckAyCgptaW50X2Z1dHVyZV9uZnRfYWZ0ZXJfZm9yQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5idXlfbmZ0W3JvdXRpbmddKCkgLT4gdm9pZDoKYnV5X25mdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODIKICAgIC8vIGFzc2VydCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4MwogICAgLy8gYXNzZXJ0IGFzc2V0X2lkID4gVUludDY0KDApCiAgICBkaWcgMgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODQKICAgIC8vIGFzc2VydCBzZWxmLm1pbnRlZF9hc3NldHMuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkgPT0gVUludDY0KDEpCiAgICBkaWcgMgogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODgtODkKICAgIC8vICMgRW5zdXJlIGJ1eWVyIGhhcyBvcHRlZC1pbiBpbiB0aGUgc2FtZSBncm91cC4KICAgIC8vIGFzc2VydCBvcHRfaW4uc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAxCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5MAogICAgLy8gYXNzZXJ0IG9wdF9pbi5hc3NldF9yZWNlaXZlciA9PSBUeG4uc2VuZGVyCiAgICBkaWcgMQogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjkxCiAgICAvLyBhc3NlcnQgb3B0X2luLnhmZXJfYXNzZXQuaWQgPT0gYXNzZXQuaWQKICAgIGRpZyAxCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGRpZyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OTIKICAgIC8vIGFzc2VydCBvcHRfaW4uYXNzZXRfYW1vdW50ID09IFVJbnQ2NCgwKQogICAgc3dhcAogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk0CiAgICAvLyBhc3NlcnQgcGF5bWVudC5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgZHVwCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5NQogICAgLy8gYXNzZXJ0IHBheW1lbnQucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZHVwCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5NgogICAgLy8gYXNzZXJ0IHBheW1lbnQuYW1vdW50ID09IHNlbGYuc2FsZV9wcmljZS52YWx1ZQogICAgZ3R4bnMgQW1vdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAic2FsZV9wcmljZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zYWxlX3ByaWNlIGV4aXN0cwogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5OAogICAgLy8gYXBwX2JhbGFuY2UsIGFwcF9vcHRlZCA9IG9wLkFzc2V0SG9sZGluZ0dldC5hc3NldF9iYWxhbmNlKEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsIGFzc2V0KQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGRpZyAyCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5OQogICAgLy8gYXNzZXJ0IGFwcF9vcHRlZAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTAwCiAgICAvLyBhc3NlcnQgYXBwX2JhbGFuY2UgPT0gVUludDY0KDEpCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwMi0xMDgKICAgIC8vICMgVHJhbnNmZXIgTkZUIHRvIGludmVzdG9yIGFuZCBmb3J3YXJkIHBheW1lbnQgdG8gY3JlYXRvci4KICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PVVJbnQ2NCgxKSwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDUKICAgIC8vIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTA2CiAgICAvLyBhc3NldF9hbW91bnQ9VUludDY0KDEpLAogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgc3dhcAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDItMTAzCiAgICAvLyAjIFRyYW5zZmVyIE5GVCB0byBpbnZlc3RvciBhbmQgZm9yd2FyZCBwYXltZW50IHRvIGNyZWF0b3IuCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDcKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTAyLTEwOAogICAgLy8gIyBUcmFuc2ZlciBORlQgdG8gaW52ZXN0b3IgYW5kIGZvcndhcmQgcGF5bWVudCB0byBjcmVhdG9yLgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9VUludDY0KDEpLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDktMTEzCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5jcmVhdG9yLnZhbHVlLAogICAgLy8gICAgIGFtb3VudD1wYXltZW50LmFtb3VudCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMTAKICAgIC8vIHJlY2VpdmVyPXNlbGYuY3JlYXRvci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwOQogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjExMgogICAgLy8gZmVlPTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDktMTEzCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5jcmVhdG9yLnZhbHVlLAogICAgLy8gICAgIGFtb3VudD1wYXltZW50LmFtb3VudCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5yZXBvcnRfaW5jb21lW3JvdXRpbmddKCkgLT4gdm9pZDoKcmVwb3J0X2luY29tZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTE5CiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTIwCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLmNyZWF0b3IudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTIxCiAgICAvLyBhc3NlcnQgcXVhcnRlciA+IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIGRpZyAzCiAgICA8CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjIKICAgIC8vIGFzc2VydCBpbmNvbWVfYW1vdW50ID4gVUludDY0KDApCiAgICBkaWcgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTI0CiAgICAvLyB0b3RhbF9wYXlvdXQgPSAoaW5jb21lX2Ftb3VudCAqIHNlbGYudG90YWxfcGN0X2Jwcy52YWx1ZSkgLy8gVUludDY0KDEwXzAwMCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJ0b3RhbF9wY3RfYnBzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX3BjdF9icHMgZXhpc3RzCiAgICBkaWcgMgogICAgKgogICAgaW50Y18zIC8vIDEwMDAwCiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTI1CiAgICAvLyBhc3NlcnQgdG90YWxfcGF5b3V0ID4gVUludDY0KDApCiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyNy0xMjgKICAgIC8vICMgUmVxdWlyZSB0aGUgY3JlYXRvciB0byBmdW5kIHRoZSBhcHAgZm9yIHRoaXMgcXVhcnRlcidzIHBheW91dHMuCiAgICAvLyBhc3NlcnQgcGF5b3V0X2Z1bmRpbmcuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAxCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjkKICAgIC8vIGFzc2VydCBwYXlvdXRfZnVuZGluZy5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkaWcgMQogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTMwCiAgICAvLyBhc3NlcnQgcGF5b3V0X2Z1bmRpbmcuYW1vdW50ID09IHRvdGFsX3BheW91dAogICAgc3dhcAogICAgZ3R4bnMgQW1vdW50CiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzMgogICAgLy8gc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUgPSBxdWFydGVyCiAgICBieXRlY18xIC8vICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiCiAgICB1bmNvdmVyIDMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTMzCiAgICAvLyBzZWxmLmxhc3RfcmVwb3J0ZWRfaW5jb21lLnZhbHVlID0gaW5jb21lX2Ftb3VudAogICAgYnl0ZWMgMTIgLy8gImxhc3RfcmVwb3J0ZWRfaW5jb21lIgogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzNAogICAgLy8gc2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSA9IHRvdGFsX3BheW91dCAvLyBzZWxmLnRvdGFsX25mdHMudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX25mdHMgZXhpc3RzCiAgICAvCiAgICBieXRlYyA1IC8vICJwYXlvdXRfcGVyX25mdCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuY2xhaW1fcGF5b3V0W3JvdXRpbmddKCkgLT4gdm9pZDoKY2xhaW1fcGF5b3V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTM4CiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTM5CiAgICAvLyBhc3NlcnQgYXNzZXRfaWQgPiBVSW50NjQoMCkKICAgIGR1cAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQwCiAgICAvLyBhc3NlcnQgc2VsZi5taW50ZWRfYXNzZXRzLmdldChhc3NldF9pZCwgZGVmYXVsdD1VSW50NjQoMCkpID09IFVJbnQ2NCgxKQogICAgZHVwCiAgICBpdG9iCiAgICBieXRlYyA3IC8vICJtYV8iCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQxCiAgICAvLyBhc3NlcnQgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUgPiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyIGV4aXN0cwogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDMKICAgIC8vIGhvbGRlcl9iYWxhbmNlLCBob2xkZXJfb3B0ZWQgPSBvcC5Bc3NldEhvbGRpbmdHZXQuYXNzZXRfYmFsYW5jZShUeG4uc2VuZGVyLCBBc3NldChhc3NldF9pZCkpCiAgICB0eG4gU2VuZGVyCiAgICB1bmNvdmVyIDMKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0NAogICAgLy8gYXNzZXJ0IGhvbGRlcl9vcHRlZAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQ1CiAgICAvLyBhc3NlcnQgaG9sZGVyX2JhbGFuY2UgPT0gVUludDY0KDEpCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0NwogICAgLy8gY2xhaW1lZCA9IHNlbGYubGFzdF9jbGFpbWVkX3F1YXJ0ZXIuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkKICAgIGJ5dGVjIDEzIC8vICJsY18iCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDgKICAgIC8vIGFzc2VydCBjbGFpbWVkIDwgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUKICAgIGRpZyAyCiAgICA8CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDkKICAgIC8vIGFzc2VydCBzZWxmLnBheW91dF9wZXJfbmZ0LnZhbHVlID4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAicGF5b3V0X3Blcl9uZnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucGF5b3V0X3Blcl9uZnQgZXhpc3RzCiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MS0xNTUKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICBhbW91bnQ9c2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MwogICAgLy8gcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTUxCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU0CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MS0xNTUKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICBhbW91bnQ9c2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTcKICAgIC8vIHNlbGYubGFzdF9jbGFpbWVkX3F1YXJ0ZXJbYXNzZXRfaWRdID0gc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWUKICAgIHN3YXAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfcGVuZGluZ19wYXlvdXQ6CiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNjEKICAgIC8vIGFzc2VydCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNjIKICAgIC8vIGFzc2VydCBhc3NldF9pZCA+IFVJbnQ2NCgwKQogICAgZGlnIDEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE2MwogICAgLy8gYXNzZXJ0IHNlbGYubWludGVkX2Fzc2V0cy5nZXQoYXNzZXRfaWQsIGRlZmF1bHQ9VUludDY0KDApKSA9PSBVSW50NjQoMSkKICAgIHN3YXAKICAgIGl0b2IKICAgIGR1cAogICAgY292ZXIgMgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY0CiAgICAvLyBhc3NlcnQgYWRkcmVzcyAhPSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNjYKICAgIC8vIGlmIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlID09IFVJbnQ2NCgwKToKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyIGV4aXN0cwogICAgYm56IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNjcKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCgpnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3BlbmRpbmdfcGF5b3V0QDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBpdG9iCiAgICBieXRlYyAxNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNjkKICAgIC8vIGhvbGRlcl9iYWxhbmNlLCBob2xkZXJfb3B0ZWQgPSBvcC5Bc3NldEhvbGRpbmdHZXQuYXNzZXRfYmFsYW5jZShhZGRyZXNzLCBBc3NldChhc3NldF9pZCkpCiAgICBkaWcgMQogICAgZGlnIDMKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgc3dhcAogICAgYnVyeSA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTcwCiAgICAvLyBpZiBub3QgaG9sZGVyX29wdGVkOgogICAgYm56IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzEKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzIKICAgIC8vIGlmIGhvbGRlcl9iYWxhbmNlICE9IFVJbnQ2NCgxKToKICAgIGRpZyAzCiAgICBpbnRjXzEgLy8gMQogICAgIT0KICAgIGJ6IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzMKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzUKICAgIC8vIGNsYWltZWQgPSBzZWxmLmxhc3RfY2xhaW1lZF9xdWFydGVyLmdldChhc3NldF9pZCwgZGVmYXVsdD1VSW50NjQoMCkpCiAgICBieXRlYyAxMyAvLyAibGNfIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTc2CiAgICAvLyBpZiBjbGFpbWVkIDwgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIudmFsdWU6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIDwKICAgIGJ6IGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzcKICAgIC8vIHJldHVybiBzZWxmLnBheW91dF9wZXJfbmZ0LnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAicGF5b3V0X3Blcl9uZnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucGF5b3V0X3Blcl9uZnQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNzgKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGIgZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfdGVybXNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfdGVybXM6CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE4NS0xODcKICAgIC8vICMgTXVzdCBiZSBzYWZlIHRvIGNhbGwgYmVmb3JlIG1pbnRpbmcvaW5pdGlhbGl6YXRpb24gKFVJIGNhbGxzIHRoaXMgYWZ0ZXIgZGVwbG95KS4KICAgIC8vICMgUmV0dXJuIHplcm8vZGVmYXVsdCB2YWx1ZXMgdW50aWwgaW5pdGlhbGl6ZWQuCiAgICAvLyBpZiBub3Qgc2VsZi5pbml0aWFsaXplZC52YWx1ZToKICAgIGR1cAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBibnogZ2V0X3Rlcm1zX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE4OQogICAgLy8gR2xvYmFsLnplcm9fYWRkcmVzcywKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTkwCiAgICAvLyBVSW50NjQoMCksCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE5MS0xOTUKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIC8vIFVJbnQ2NCgwKSwKICAgIGR1cG4gNQoKZ2V0X3Rlcm1zX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF90ZXJtc0A0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB1bmNvdmVyIDUKICAgIGl0b2IKICAgIGRpZyA2CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgNQogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDE0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpnZXRfdGVybXNfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE5OAogICAgLy8gc2VsZi5jcmVhdG9yLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImNyZWF0b3IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY3JlYXRvciBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTkKICAgIC8vIHNlbGYudG90YWxfbmZ0cy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX25mdHMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjAwCiAgICAvLyBzZWxmLnRvdGFsX3BjdF9icHMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9wY3RfYnBzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwMQogICAgLy8gc2VsZi5kdXJhdGlvbl95ZWFycy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJkdXJhdGlvbl95ZWFycyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kdXJhdGlvbl95ZWFycyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDIKICAgIC8vIHNlbGYuc3RhcnRfcXVhcnRlci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA5IC8vICJzdGFydF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXJ0X3F1YXJ0ZXIgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjAzCiAgICAvLyBzZWxmLnNhbGVfcHJpY2UudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAic2FsZV9wcmljZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zYWxlX3ByaWNlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwNAogICAgLy8gc2VsZi5maXJzdF9hc3NldF9pZC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZmlyc3RfYXNzZXRfaWQgZXhpc3RzCiAgICB1bmNvdmVyIDYKICAgIGJ1cnkgNwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF90ZXJtc19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfdGVybXNANAo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [755, 808, 1154], "errorMessage": "check self.creator exists"}, {"pc": [1167], "errorMessage": "check self.duration_years exists"}, {"pc": [1182], "errorMessage": "check self.first_asset_id exists"}, {"pc": [373, 644, 800, 888, 997, 1106], "errorMessage": "check self.initialized exists"}, {"pc": [814, 913, 1029, 1085], "errorMessage": "check self.last_reported_quarter exists"}, {"pc": [948, 1094], "errorMessage": "check self.payout_per_nft exists"}, {"pc": [716, 1177], "errorMessage": "check self.sale_price exists"}, {"pc": [1172], "errorMessage": "check self.start_quarter exists"}, {"pc": [452, 868, 1158], "errorMessage": "check self.total_nfts exists"}, {"pc": [448, 825, 1162], "errorMessage": "check self.total_pct_bps exists"}, {"pc": [993], "errorMessage": "invalid number of bytes for arc4.static_array"}, {"pc": [321, 331, 340, 349, 358, 617, 776, 785, 883, 979], "errorMessage": "invalid number of bytes for arc4.uint64"}, {"pc": [630], "errorMessage": "transaction type is axfer"}, {"pc": [369, 640, 796], "errorMessage": "transaction type is pay"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" +_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "total_nfts"}, {"type": "uint64", "name": "total_pct_bps"}, {"type": "uint64", "name": "duration_years"}, {"type": "uint64", "name": "start_quarter"}, {"type": "uint64", "name": "sale_price"}, {"type": "pay", "name": "mbr_payment"}], "name": "mint_future_nft", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "asset_id"}, {"type": "axfer", "name": "opt_in"}, {"type": "pay", "name": "payment"}], "name": "buy_nft", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "quarter"}, {"type": "uint64", "name": "income_amount"}, {"type": "pay", "name": "payout_funding"}], "name": "report_income", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "asset_id"}], "name": "claim_payout", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "asset_id"}, {"type": "address", "name": "address"}], "name": "get_pending_payout", "returns": {"type": "uint64"}, "events": [], "readonly": true, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_terms", "returns": {"type": "(address,uint64,uint64,uint64,uint64,uint64,uint64)"}, "desc": "Returns: (creator, total_nfts, total_pct_bps, duration_years, start_quarter, sale_price, first_asset_id)", "events": [], "readonly": true, "recommendations": {}}], "name": "Algomint", "state": {"keys": {"box": {}, "global": {"creator": {"key": "Y3JlYXRvcg==", "keyType": "AVMString", "valueType": "address"}, "total_nfts": {"key": "dG90YWxfbmZ0cw==", "keyType": "AVMString", "valueType": "AVMUint64"}, "total_pct_bps": {"key": "dG90YWxfcGN0X2Jwcw==", "keyType": "AVMString", "valueType": "AVMUint64"}, "duration_years": {"key": "ZHVyYXRpb25feWVhcnM=", "keyType": "AVMString", "valueType": "AVMUint64"}, "start_quarter": {"key": "c3RhcnRfcXVhcnRlcg==", "keyType": "AVMString", "valueType": "AVMUint64"}, "sale_price": {"key": "c2FsZV9wcmljZQ==", "keyType": "AVMString", "valueType": "AVMUint64"}, "first_asset_id": {"key": "Zmlyc3RfYXNzZXRfaWQ=", "keyType": "AVMString", "valueType": "AVMUint64"}, "pct_per_nft_bps": {"key": "cGN0X3Blcl9uZnRfYnBz", "keyType": "AVMString", "valueType": "AVMUint64"}, "last_reported_quarter": {"key": "bGFzdF9yZXBvcnRlZF9xdWFydGVy", "keyType": "AVMString", "valueType": "AVMUint64"}, "last_reported_income": {"key": "bGFzdF9yZXBvcnRlZF9pbmNvbWU=", "keyType": "AVMString", "valueType": "AVMUint64"}, "payout_per_nft": {"key": "cGF5b3V0X3Blcl9uZnQ=", "keyType": "AVMString", "valueType": "AVMUint64"}, "initialized": {"key": "aW5pdGlhbGl6ZWQ=", "keyType": "AVMString", "valueType": "AVMUint64"}}, "local": {}}, "maps": {"box": {"last_claimed_quarter": {"keyType": "uint64", "valueType": "uint64", "prefix": "bGNf"}, "minted_assets": {"keyType": "uint64", "valueType": "uint64", "prefix": "bWFf"}}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 1, "ints": 11}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CyAEAAEI6AcmDwtpbml0aWFsaXplZBVsYXN0X3JlcG9ydGVkX3F1YXJ0ZXIKdG90YWxfbmZ0cw10b3RhbF9wY3RfYnBzCnNhbGVfcHJpY2UOcGF5b3V0X3Blcl9uZnQHY3JlYXRvcgNtYV8OZHVyYXRpb25feWVhcnMNc3RhcnRfcXVhcnRlcg5maXJzdF9hc3NldF9pZA9wY3RfcGVyX25mdF9icHMUbGFzdF9yZXBvcnRlZF9pbmNvbWUDbGNfBBUffHUxGEAAKCoiZysiZycIImcnCSJnJwQiZycKImcnCyJnKSJnJwwiZycFImcoImcxG0EAOTEZFEQxGESCBgSsbhoEBN2YDm0EvY3JfgSUXxd3BFc3cXgEvvwWxTYaAI4GAAkBNQHUAkECnwMjADEZFDEYFBBDgAA2GgFJFSQSRBdJNhoCSRUkEkQXNhoDSRUkEkQXNhoESRUkEkQXNhoFSRUkEkQXMRYjCUk4ECMSRCIoZUQUREsFREsEREsEgZBODkRLA0RLAkRLAURJOAAxABJESTgHMgoSRDgIgcCEPQ9EJwYxAGcqTwVnK08EZycITwNnJwlPAmcnBExnIitlRCIqZUQKJwtMZygjZyJJSwIMQQCLsTIKSbIqsimAMHRlbXBsYXRlLWlwZnM6Ly97aXBmc2NpZDoxOnJhdzpyZXNlcnZlOnNoYTItMjU2fbIngAVGRU5GVLIlgBJGdXR1cmUgRWFybmluZyBORlSyJiKyJCKyIyOyIoEDshAlsgGztDxFA0lAAAUnCksDZ0sCFicHTFAjFr9JIwhFAUL/biNDNhoBSRUkEkQXMRaBAglJOBCBBBJEMRYjCUk4ECMSRCIoZURESwJESwIWJwdMUL5MFyJMTwJNIxJESwE4ADEAEkRLATgUMQASREsBOBFLAxJETDgSFERJOAAxABJESTgHMgoSRDgIIicEZURLARJEMgpLAnAARCMSRLExACOyErIUTLIRgQSyECWyAbOxIicGZUSyB7III7IQJbIBsyNDNhoBSRUkEkQXNhoCSRUkEkQXMRYjCUk4ECMSRCIoZUREMQAiJwZlRBJEIillREsDDERLAUQiK2VESwILgZBOCklESwE4ADEAEkRLATgHMgoSREw4CEsBEkQpTwNnJwxPAmciKmVECicFTGcjQzYaAUkVJBJEFyIoZURESURJFicHSwFQvkwXIkxPAk0jEkQiKWVESUQxAE8DcABEIxJEJw1PAlBJvkwXIkxPAk1LAgxEIicFZURJRLExALIHsggjshAlsgGzTBa/I0OAADYaAUkVJBJEF0k2GgJJTgJJFYEgEkQiKGVEREsBREwWSU4CJwdMUL5MFyJMTwJNIxJEMgMTRCIpZURAAAkiFicOTFCwI0NLAUsDcABMRQVAAAQiQv/oSwMjE0EABCJC/90nDUsBUL5MFyJMTwJNIillRAxBAAgiJwVlREL/wCJC/7wiSShlREAAKDIDRQEiRwVPBRZLBkxQTwUWUE8EFlBPAxZQTwIWUEwWUCcOTFCwI0MiJwZlRCIqZUQiK2VEIicIZUQiJwllRCInBGVEIicKZURPBkUHQv+3", "clear": "C4EBQw=="}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCAxMDAwCiAgICBieXRlY2Jsb2NrICJpbml0aWFsaXplZCIgImxhc3RfcmVwb3J0ZWRfcXVhcnRlciIgInRvdGFsX25mdHMiICJ0b3RhbF9wY3RfYnBzIiAic2FsZV9wcmljZSIgInBheW91dF9wZXJfbmZ0IiAiY3JlYXRvciIgIm1hXyIgImR1cmF0aW9uX3llYXJzIiAic3RhcnRfcXVhcnRlciIgImZpcnN0X2Fzc2V0X2lkIiAicGN0X3Blcl9uZnRfYnBzIiAibGFzdF9yZXBvcnRlZF9pbmNvbWUiICJsY18iIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4CiAgICAvLyBzZWxmLnRvdGFsX25mdHMgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OQogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwCiAgICAvLyBzZWxmLmR1cmF0aW9uX3llYXJzID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgOCAvLyAiZHVyYXRpb25feWVhcnMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMQogICAgLy8gc2VsZi5zdGFydF9xdWFydGVyID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyCiAgICAvLyBzZWxmLnNhbGVfcHJpY2UgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyA0IC8vICJzYWxlX3ByaWNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTMKICAgIC8vIHNlbGYuZmlyc3RfYXNzZXRfaWQgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNAogICAgLy8gc2VsZi5wY3RfcGVyX25mdF9icHMgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMSAvLyAicGN0X3Blcl9uZnRfYnBzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTUKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTYKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9pbmNvbWUgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyAxMiAvLyAibGFzdF9yZXBvcnRlZF9pbmNvbWUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNwogICAgLy8gc2VsZi5wYXlvdXRfcGVyX25mdCA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjIDUgLy8gInBheW91dF9wZXJfbmZ0IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTgKICAgIC8vIHNlbGYuaW5pdGlhbGl6ZWQgPSBHbG9iYWxTdGF0ZShGYWxzZSkKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo0CiAgICAvLyBjbGFzcyBBbGdvbWludChBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTUKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweGFjNmUxYTA0IDB4ZGQ5ODBlNmQgMHhiZDhkYzk3ZSAweDk0NWYxNzc3IDB4NTczNzcxNzggMHhiZWZjMTZjNSAvLyBtZXRob2QgIm1pbnRfZnV0dXJlX25mdCh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHBheSl2b2lkIiwgbWV0aG9kICJidXlfbmZ0KHVpbnQ2NCxheGZlcixwYXkpdm9pZCIsIG1ldGhvZCAicmVwb3J0X2luY29tZSh1aW50NjQsdWludDY0LHBheSl2b2lkIiwgbWV0aG9kICJjbGFpbV9wYXlvdXQodWludDY0KXZvaWQiLCBtZXRob2QgImdldF9wZW5kaW5nX3BheW91dCh1aW50NjQsYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgImdldF90ZXJtcygpKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWludF9mdXR1cmVfbmZ0IGJ1eV9uZnQgcmVwb3J0X2luY29tZSBjbGFpbV9wYXlvdXQgZ2V0X3BlbmRpbmdfcGF5b3V0IGdldF90ZXJtcwogICAgZXJyCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDE1OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQubWludF9mdXR1cmVfbmZ0W3JvdXRpbmddKCkgLT4gdm9pZDoKbWludF9mdXR1cmVfbmZ0OgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozNQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozNgogICAgLy8gYXNzZXJ0IHRvdGFsX25mdHMgPiBVSW50NjQoMCkKICAgIGRpZyA1CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozNwogICAgLy8gYXNzZXJ0IHRvdGFsX3BjdF9icHMgPiBVSW50NjQoMCkKICAgIGRpZyA0CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTozOAogICAgLy8gYXNzZXJ0IHRvdGFsX3BjdF9icHMgPD0gVUludDY0KDEwXzAwMCkKICAgIGRpZyA0CiAgICBwdXNoaW50IDEwMDAwCiAgICA8PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MzkKICAgIC8vIGFzc2VydCBkdXJhdGlvbl95ZWFycyA+IFVJbnQ2NCgwKQogICAgZGlnIDMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQwCiAgICAvLyBhc3NlcnQgc3RhcnRfcXVhcnRlciA+IFVJbnQ2NCgwKQogICAgZGlnIDIKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBhc3NlcnQgc2FsZV9wcmljZSA+IFVJbnQ2NCgwKQogICAgZGlnIDEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQzCiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGR1cAogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NDQKICAgIC8vIGFzc2VydCBtYnJfcGF5bWVudC5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQ1LTQ2CiAgICAvLyAjIE5PVEU6IEV4YWN0IE1CUiBkZXBlbmRzIG9uIHByb3RvY29sIHBhcmFtczsgcmVxdWlyZSBhIHNlbnNpYmxlIG1pbmltdW0gZm9yIGRlbW8uCiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQuYW1vdW50ID49IFVJbnQ2NCgxXzAwMF8wMDApCiAgICBndHhucyBBbW91bnQKICAgIHB1c2hpbnQgMTAwMDAwMAogICAgPj0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjQ4CiAgICAvLyBzZWxmLmNyZWF0b3IudmFsdWUgPSBUeG4uc2VuZGVyCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo0OQogICAgLy8gc2VsZi50b3RhbF9uZnRzLnZhbHVlID0gdG90YWxfbmZ0cwogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIHVuY292ZXIgNQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MAogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlID0gdG90YWxfcGN0X2JwcwogICAgYnl0ZWNfMyAvLyAidG90YWxfcGN0X2JwcyIKICAgIHVuY292ZXIgNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MQogICAgLy8gc2VsZi5kdXJhdGlvbl95ZWFycy52YWx1ZSA9IGR1cmF0aW9uX3llYXJzCiAgICBieXRlYyA4IC8vICJkdXJhdGlvbl95ZWFycyIKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MgogICAgLy8gc2VsZi5zdGFydF9xdWFydGVyLnZhbHVlID0gc3RhcnRfcXVhcnRlcgogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1MwogICAgLy8gc2VsZi5zYWxlX3ByaWNlLnZhbHVlID0gc2FsZV9wcmljZQogICAgYnl0ZWMgNCAvLyAic2FsZV9wcmljZSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTQKICAgIC8vIHNlbGYucGN0X3Blcl9uZnRfYnBzLnZhbHVlID0gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlIC8vIHNlbGYudG90YWxfbmZ0cy52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInRvdGFsX3BjdF9icHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfcGN0X2JwcyBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ0b3RhbF9uZnRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX25mdHMgZXhpc3RzCiAgICAvCiAgICBieXRlYyAxMSAvLyAicGN0X3Blcl9uZnRfYnBzIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1NQogICAgLy8gc2VsZi5pbml0aWFsaXplZC52YWx1ZSA9IFRydWUKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTctNTgKICAgIC8vICMgTWludCBhIGZpeGVkIHNlcmllcyBvZiBBUkMtMTkgc3R5bGUgTkZUcyBmcm9tIHRoZSBhcHAgYWNjb3VudC4KICAgIC8vIGZvciBpZHggaW4gdXJhbmdlKHRvdGFsX25mdHMpOgogICAgaW50Y18wIC8vIDAKCm1pbnRfZnV0dXJlX25mdF9mb3JfaGVhZGVyQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTctNTgKICAgIC8vICMgTWludCBhIGZpeGVkIHNlcmllcyBvZiBBUkMtMTkgc3R5bGUgTkZUcyBmcm9tIHRoZSBhcHAgYWNjb3VudC4KICAgIC8vIGZvciBpZHggaW4gdXJhbmdlKHRvdGFsX25mdHMpOgogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogbWludF9mdXR1cmVfbmZ0X2FmdGVyX2ZvckA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NTktNzAKICAgIC8vIGNyZWF0ZWQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIHRvdGFsPTEsCiAgICAvLyAgICAgZGVjaW1hbHM9MCwKICAgIC8vICAgICBkZWZhdWx0X2Zyb3plbj1GYWxzZSwKICAgIC8vICAgICBhc3NldF9uYW1lPWIiRnV0dXJlIEVhcm5pbmcgTkZUIiwKICAgIC8vICAgICB1bml0X25hbWU9YiJGRU5GVCIsCiAgICAvLyAgICAgIyBBUkMtMTkgdGVtcGxhdGUgVVJMIChDSUQgc291cmNlZCBmcm9tIHJlc2VydmUgYWNjb3VudCBieSBjbGllbnRzKS4KICAgIC8vICAgICB1cmw9YiJ0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn0iLAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPTEwMDAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjcKICAgIC8vIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjgKICAgIC8vIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGR1cAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjUtNjYKICAgIC8vICMgQVJDLTE5IHRlbXBsYXRlIFVSTCAoQ0lEIHNvdXJjZWQgZnJvbSByZXNlcnZlIGFjY291bnQgYnkgY2xpZW50cykuCiAgICAvLyB1cmw9YiJ0ZW1wbGF0ZS1pcGZzOi8ve2lwZnNjaWQ6MTpyYXc6cmVzZXJ2ZTpzaGEyLTI1Nn0iLAogICAgcHVzaGJ5dGVzIDB4NzQ2NTZkNzA2YzYxNzQ2NTJkNjk3MDY2NzMzYTJmMmY3YjY5NzA2NjczNjM2OTY0M2EzMTNhNzI2MTc3M2E3MjY1NzM2NTcyNzY2NTNhNzM2ODYxMzIyZDMyMzUzNjdkCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NjQKICAgIC8vIHVuaXRfbmFtZT1iIkZFTkZUIiwKICAgIHB1c2hieXRlcyAweDQ2NDU0ZTQ2NTQKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjYzCiAgICAvLyBhc3NldF9uYW1lPWIiRnV0dXJlIEVhcm5pbmcgTkZUIiwKICAgIHB1c2hieXRlcyAweDQ2NzU3NDc1NzI2NTIwNDU2MTcyNmU2OTZlNjcyMDRlNDY1NAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MgogICAgLy8gZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlZmF1bHRGcm96ZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MQogICAgLy8gZGVjaW1hbHM9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo2MAogICAgLy8gdG90YWw9MSwKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo1OQogICAgLy8gY3JlYXRlZCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjY5CiAgICAvLyBmZWU9MTAwMCwKICAgIGludGNfMyAvLyAxMDAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU5LTcwCiAgICAvLyBjcmVhdGVkID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD0xLAogICAgLy8gICAgIGRlY2ltYWxzPTAsCiAgICAvLyAgICAgZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICAvLyAgICAgYXNzZXRfbmFtZT1iIkZ1dHVyZSBFYXJuaW5nIE5GVCIsCiAgICAvLyAgICAgdW5pdF9uYW1lPWIiRkVORlQiLAogICAgLy8gICAgICMgQVJDLTE5IHRlbXBsYXRlIFVSTCAoQ0lEIHNvdXJjZWQgZnJvbSByZXNlcnZlIGFjY291bnQgYnkgY2xpZW50cykuCiAgICAvLyAgICAgdXJsPWIidGVtcGxhdGUtaXBmczovL3tpcGZzY2lkOjE6cmF3OnJlc2VydmU6c2hhMi0yNTZ9IiwKICAgIC8vICAgICBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIGJ1cnkgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjcxCiAgICAvLyBpZiBpZHggPT0gVUludDY0KDApOgogICAgZHVwCiAgICBibnogbWludF9mdXR1cmVfbmZ0X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjcyCiAgICAvLyBzZWxmLmZpcnN0X2Fzc2V0X2lkLnZhbHVlID0gY3JlYXRlZC5jcmVhdGVkX2Fzc2V0LmlkCiAgICBieXRlYyAxMCAvLyAiZmlyc3RfYXNzZXRfaWQiCiAgICBkaWcgMwogICAgYXBwX2dsb2JhbF9wdXQKCm1pbnRfZnV0dXJlX25mdF9hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzMKICAgIC8vIHNlbGYubWludGVkX2Fzc2V0c1tjcmVhdGVkLmNyZWF0ZWRfYXNzZXQuaWRdID0gVUludDY0KDEpCiAgICBkaWcgMgogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBpbnRjXzEgLy8gMQogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjU3LTU4CiAgICAvLyAjIE1pbnQgYSBmaXhlZCBzZXJpZXMgb2YgQVJDLTE5IHN0eWxlIE5GVHMgZnJvbSB0aGUgYXBwIGFjY291bnQuCiAgICAvLyBmb3IgaWR4IGluIHVyYW5nZSh0b3RhbF9uZnRzKToKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBtaW50X2Z1dHVyZV9uZnRfZm9yX2hlYWRlckAyCgptaW50X2Z1dHVyZV9uZnRfYWZ0ZXJfZm9yQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5idXlfbmZ0W3JvdXRpbmddKCkgLT4gdm9pZDoKYnV5X25mdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODIKICAgIC8vIGFzc2VydCBzZWxmLmluaXRpYWxpemVkLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiaW5pdGlhbGl6ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW5pdGlhbGl6ZWQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo4MwogICAgLy8gYXNzZXJ0IGFzc2V0X2lkID4gVUludDY0KDApCiAgICBkaWcgMgogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODQKICAgIC8vIGFzc2VydCBzZWxmLm1pbnRlZF9hc3NldHMuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkgPT0gVUludDY0KDEpCiAgICBkaWcgMgogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6ODgtODkKICAgIC8vICMgRW5zdXJlIGJ1eWVyIGhhcyBvcHRlZC1pbiBpbiB0aGUgc2FtZSBncm91cC4KICAgIC8vIGFzc2VydCBvcHRfaW4uc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAxCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5MAogICAgLy8gYXNzZXJ0IG9wdF9pbi5hc3NldF9yZWNlaXZlciA9PSBUeG4uc2VuZGVyCiAgICBkaWcgMQogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjkxCiAgICAvLyBhc3NlcnQgb3B0X2luLnhmZXJfYXNzZXQuaWQgPT0gYXNzZXQuaWQKICAgIGRpZyAxCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGRpZyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6OTIKICAgIC8vIGFzc2VydCBvcHRfaW4uYXNzZXRfYW1vdW50ID09IFVJbnQ2NCgwKQogICAgc3dhcAogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5Ojk0CiAgICAvLyBhc3NlcnQgcGF5bWVudC5zZW5kZXIgPT0gVHhuLnNlbmRlcgogICAgZHVwCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5NQogICAgLy8gYXNzZXJ0IHBheW1lbnQucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZHVwCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5NgogICAgLy8gYXNzZXJ0IHBheW1lbnQuYW1vdW50ID09IHNlbGYuc2FsZV9wcmljZS52YWx1ZQogICAgZ3R4bnMgQW1vdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAic2FsZV9wcmljZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zYWxlX3ByaWNlIGV4aXN0cwogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5OAogICAgLy8gYXBwX2JhbGFuY2UsIGFwcF9vcHRlZCA9IG9wLkFzc2V0SG9sZGluZ0dldC5hc3NldF9iYWxhbmNlKEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsIGFzc2V0KQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGRpZyAyCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weTo5OQogICAgLy8gYXNzZXJ0IGFwcF9vcHRlZAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTAwCiAgICAvLyBhc3NlcnQgYXBwX2JhbGFuY2UgPT0gVUludDY0KDEpCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwMi0xMDgKICAgIC8vICMgVHJhbnNmZXIgTkZUIHRvIGludmVzdG9yIGFuZCBmb3J3YXJkIHBheW1lbnQgdG8gY3JlYXRvci4KICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PVVJbnQ2NCgxKSwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDUKICAgIC8vIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTA2CiAgICAvLyBhc3NldF9hbW91bnQ9VUludDY0KDEpLAogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgc3dhcAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDItMTAzCiAgICAvLyAjIFRyYW5zZmVyIE5GVCB0byBpbnZlc3RvciBhbmQgZm9yd2FyZCBwYXltZW50IHRvIGNyZWF0b3IuCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDcKICAgIC8vIGZlZT0xMDAwLAogICAgaW50Y18zIC8vIDEwMDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTAyLTEwOAogICAgLy8gIyBUcmFuc2ZlciBORlQgdG8gaW52ZXN0b3IgYW5kIGZvcndhcmQgcGF5bWVudCB0byBjcmVhdG9yLgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9VUludDY0KDEpLAogICAgLy8gICAgIGZlZT0xMDAwLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDktMTEzCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5jcmVhdG9yLnZhbHVlLAogICAgLy8gICAgIGFtb3VudD1wYXltZW50LmFtb3VudCwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMTAKICAgIC8vIHJlY2VpdmVyPXNlbGYuY3JlYXRvci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEwOQogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjExMgogICAgLy8gZmVlPTEwMDAsCiAgICBpbnRjXzMgLy8gMTAwMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMDktMTEzCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5jcmVhdG9yLnZhbHVlLAogICAgLy8gICAgIGFtb3VudD1wYXltZW50LmFtb3VudCwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6NzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5yZXBvcnRfaW5jb21lW3JvdXRpbmddKCkgLT4gdm9pZDoKcmVwb3J0X2luY29tZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTE5CiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTIwCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLmNyZWF0b3IudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTIxCiAgICAvLyBhc3NlcnQgcXVhcnRlciA+IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIGRpZyAzCiAgICA8CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjIKICAgIC8vIGFzc2VydCBpbmNvbWVfYW1vdW50ID4gVUludDY0KDApCiAgICBkaWcgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTI0CiAgICAvLyB0b3RhbF9wYXlvdXQgPSAoaW5jb21lX2Ftb3VudCAqIHNlbGYudG90YWxfcGN0X2Jwcy52YWx1ZSkgLy8gVUludDY0KDEwXzAwMCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJ0b3RhbF9wY3RfYnBzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX3BjdF9icHMgZXhpc3RzCiAgICBkaWcgMgogICAgKgogICAgcHVzaGludCAxMDAwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEyNQogICAgLy8gYXNzZXJ0IHRvdGFsX3BheW91dCA+IFVJbnQ2NCgwKQogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMjctMTI4CiAgICAvLyAjIFJlcXVpcmUgdGhlIGNyZWF0b3IgdG8gZnVuZCB0aGUgYXBwIGZvciB0aGlzIHF1YXJ0ZXIncyBwYXlvdXRzLgogICAgLy8gYXNzZXJ0IHBheW91dF9mdW5kaW5nLnNlbmRlciA9PSBUeG4uc2VuZGVyCiAgICBkaWcgMQogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTI5CiAgICAvLyBhc3NlcnQgcGF5b3V0X2Z1bmRpbmcucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZGlnIDEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzMAogICAgLy8gYXNzZXJ0IHBheW91dF9mdW5kaW5nLmFtb3VudCA9PSB0b3RhbF9wYXlvdXQKICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzIKICAgIC8vIHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlID0gcXVhcnRlcgogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzMwogICAgLy8gc2VsZi5sYXN0X3JlcG9ydGVkX2luY29tZS52YWx1ZSA9IGluY29tZV9hbW91bnQKICAgIGJ5dGVjIDEyIC8vICJsYXN0X3JlcG9ydGVkX2luY29tZSIKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzQKICAgIC8vIHNlbGYucGF5b3V0X3Blcl9uZnQudmFsdWUgPSB0b3RhbF9wYXlvdXQgLy8gc2VsZi50b3RhbF9uZnRzLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9uZnRzIGV4aXN0cwogICAgLwogICAgYnl0ZWMgNSAvLyAicGF5b3V0X3Blcl9uZnQiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjExNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmNsYWltX3BheW91dFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsYWltX3BheW91dDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzOAogICAgLy8gYXNzZXJ0IHNlbGYuaW5pdGlhbGl6ZWQudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJpbml0aWFsaXplZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbml0aWFsaXplZCBleGlzdHMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjEzOQogICAgLy8gYXNzZXJ0IGFzc2V0X2lkID4gVUludDY0KDApCiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0MAogICAgLy8gYXNzZXJ0IHNlbGYubWludGVkX2Fzc2V0cy5nZXQoYXNzZXRfaWQsIGRlZmF1bHQ9VUludDY0KDApKSA9PSBVSW50NjQoMSkKICAgIGR1cAogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAibWFfIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0MQogICAgLy8gYXNzZXJ0IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlID4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIGR1cAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQzCiAgICAvLyBob2xkZXJfYmFsYW5jZSwgaG9sZGVyX29wdGVkID0gb3AuQXNzZXRIb2xkaW5nR2V0LmFzc2V0X2JhbGFuY2UoVHhuLnNlbmRlciwgQXNzZXQoYXNzZXRfaWQpKQogICAgdHhuIFNlbmRlcgogICAgdW5jb3ZlciAzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDQKICAgIC8vIGFzc2VydCBob2xkZXJfb3B0ZWQKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE0NQogICAgLy8gYXNzZXJ0IGhvbGRlcl9iYWxhbmNlID09IFVJbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNDcKICAgIC8vIGNsYWltZWQgPSBzZWxmLmxhc3RfY2xhaW1lZF9xdWFydGVyLmdldChhc3NldF9pZCwgZGVmYXVsdD1VSW50NjQoMCkpCiAgICBieXRlYyAxMyAvLyAibGNfIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQ4CiAgICAvLyBhc3NlcnQgY2xhaW1lZCA8IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlCiAgICBkaWcgMgogICAgPAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTQ5CiAgICAvLyBhc3NlcnQgc2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZSA+IFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInBheW91dF9wZXJfbmZ0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnBheW91dF9wZXJfbmZ0IGV4aXN0cwogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTEtMTU1CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgYW1vdW50PXNlbGYucGF5b3V0X3Blcl9uZnQudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTMKICAgIC8vIHJlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1MQogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1NAogICAgLy8gZmVlPTEwMDAsCiAgICBpbnRjXzMgLy8gMTAwMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTEtMTU1CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgYW1vdW50PXNlbGYucGF5b3V0X3Blcl9uZnQudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU9MTAwMCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU3CiAgICAvLyBzZWxmLmxhc3RfY2xhaW1lZF9xdWFydGVyW2Fzc2V0X2lkXSA9IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlCiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTM2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3BlbmRpbmdfcGF5b3V0W3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3BlbmRpbmdfcGF5b3V0OgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTYxCiAgICAvLyBhc3NlcnQgc2VsZi5pbml0aWFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTYyCiAgICAvLyBhc3NlcnQgYXNzZXRfaWQgPiBVSW50NjQoMCkKICAgIGRpZyAxCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNjMKICAgIC8vIGFzc2VydCBzZWxmLm1pbnRlZF9hc3NldHMuZ2V0KGFzc2V0X2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkgPT0gVUludDY0KDEpCiAgICBzd2FwCiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJ5dGVjIDcgLy8gIm1hXyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE2NAogICAgLy8gYXNzZXJ0IGFkZHJlc3MgIT0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY2CiAgICAvLyBpZiBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlci52YWx1ZSA9PSBVSW50NjQoMCk6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibGFzdF9yZXBvcnRlZF9xdWFydGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhc3RfcmVwb3J0ZWRfcXVhcnRlciBleGlzdHMKICAgIGJueiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY3CiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAoKZ2V0X3BlbmRpbmdfcGF5b3V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFsZ29taW50LmNvbnRyYWN0LkFsZ29taW50LmdldF9wZW5kaW5nX3BheW91dEAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgaXRvYgogICAgYnl0ZWMgMTQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTY5CiAgICAvLyBob2xkZXJfYmFsYW5jZSwgaG9sZGVyX29wdGVkID0gb3AuQXNzZXRIb2xkaW5nR2V0LmFzc2V0X2JhbGFuY2UoYWRkcmVzcywgQXNzZXQoYXNzZXRfaWQpKQogICAgZGlnIDEKICAgIGRpZyAzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIHN3YXAKICAgIGJ1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE3MAogICAgLy8gaWYgbm90IGhvbGRlcl9vcHRlZDoKICAgIGJueiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTcxCiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTcyCiAgICAvLyBpZiBob2xkZXJfYmFsYW5jZSAhPSBVSW50NjQoMSk6CiAgICBkaWcgMwogICAgaW50Y18xIC8vIDEKICAgICE9CiAgICBieiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTczCiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTc1CiAgICAvLyBjbGFpbWVkID0gc2VsZi5sYXN0X2NsYWltZWRfcXVhcnRlci5nZXQoYXNzZXRfaWQsIGRlZmF1bHQ9VUludDY0KDApKQogICAgYnl0ZWMgMTMgLy8gImxjXyIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE3NgogICAgLy8gaWYgY2xhaW1lZCA8IHNlbGYubGFzdF9yZXBvcnRlZF9xdWFydGVyLnZhbHVlOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImxhc3RfcmVwb3J0ZWRfcXVhcnRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYXN0X3JlcG9ydGVkX3F1YXJ0ZXIgZXhpc3RzCiAgICA8CiAgICBieiBnZXRfcGVuZGluZ19wYXlvdXRfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTc3CiAgICAvLyByZXR1cm4gc2VsZi5wYXlvdXRfcGVyX25mdC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInBheW91dF9wZXJfbmZ0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnBheW91dF9wZXJfbmZ0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCmdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTc4CiAgICAvLyByZXR1cm4gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBiIGdldF9wZW5kaW5nX3BheW91dF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfcGVuZGluZ19wYXlvdXRAMTAKCgovLyBzbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3Rlcm1zW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3Rlcm1zOgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODUtMTg3CiAgICAvLyAjIE11c3QgYmUgc2FmZSB0byBjYWxsIGJlZm9yZSBtaW50aW5nL2luaXRpYWxpemF0aW9uIChVSSBjYWxscyB0aGlzIGFmdGVyIGRlcGxveSkuCiAgICAvLyAjIFJldHVybiB6ZXJvL2RlZmF1bHQgdmFsdWVzIHVudGlsIGluaXRpYWxpemVkLgogICAgLy8gaWYgbm90IHNlbGYuaW5pdGlhbGl6ZWQudmFsdWU6CiAgICBkdXAKICAgIGJ5dGVjXzAgLy8gImluaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmluaXRpYWxpemVkIGV4aXN0cwogICAgYm56IGdldF90ZXJtc19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODkKICAgIC8vIEdsb2JhbC56ZXJvX2FkZHJlc3MsCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjE5MAogICAgLy8gVUludDY0KDApLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTEtMTk1CiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICAvLyBVSW50NjQoMCksCiAgICBkdXBuIDUKCmdldF90ZXJtc19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5hbGdvbWludC5jb250cmFjdC5BbGdvbWludC5nZXRfdGVybXNANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdW5jb3ZlciA1CiAgICBpdG9iCiAgICBkaWcgNgogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDUKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyAxNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZ2V0X3Rlcm1zX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxOTgKICAgIC8vIHNlbGYuY3JlYXRvci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNyZWF0b3IgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MTk5CiAgICAvLyBzZWxmLnRvdGFsX25mdHMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAidG90YWxfbmZ0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9uZnRzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwMAogICAgLy8gc2VsZi50b3RhbF9wY3RfYnBzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInRvdGFsX3BjdF9icHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfcGN0X2JwcyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDEKICAgIC8vIHNlbGYuZHVyYXRpb25feWVhcnMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiZHVyYXRpb25feWVhcnMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZHVyYXRpb25feWVhcnMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWxnb21pbnQvY29udHJhY3QucHk6MjAyCiAgICAvLyBzZWxmLnN0YXJ0X3F1YXJ0ZXIudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOSAvLyAic3RhcnRfcXVhcnRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGFydF9xdWFydGVyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FsZ29taW50L2NvbnRyYWN0LnB5OjIwMwogICAgLy8gc2VsZi5zYWxlX3ByaWNlLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gInNhbGVfcHJpY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2FsZV9wcmljZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToyMDQKICAgIC8vIHNlbGYuZmlyc3RfYXNzZXRfaWQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gImZpcnN0X2Fzc2V0X2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmZpcnN0X2Fzc2V0X2lkIGV4aXN0cwogICAgdW5jb3ZlciA2CiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hbGdvbWludC9jb250cmFjdC5weToxODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYiBnZXRfdGVybXNfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYWxnb21pbnQuY29udHJhY3QuQWxnb21pbnQuZ2V0X3Rlcm1zQDQK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [757, 810, 1158], "errorMessage": "check self.creator exists"}, {"pc": [1171], "errorMessage": "check self.duration_years exists"}, {"pc": [1186], "errorMessage": "check self.first_asset_id exists"}, {"pc": [373, 646, 802, 892, 1001, 1110], "errorMessage": "check self.initialized exists"}, {"pc": [816, 917, 1033, 1089], "errorMessage": "check self.last_reported_quarter exists"}, {"pc": [952, 1098], "errorMessage": "check self.payout_per_nft exists"}, {"pc": [718, 1181], "errorMessage": "check self.sale_price exists"}, {"pc": [1176], "errorMessage": "check self.start_quarter exists"}, {"pc": [454, 872, 1162], "errorMessage": "check self.total_nfts exists"}, {"pc": [450, 827, 1166], "errorMessage": "check self.total_pct_bps exists"}, {"pc": [997], "errorMessage": "invalid number of bytes for arc4.static_array"}, {"pc": [321, 331, 340, 349, 358, 619, 778, 787, 887, 983], "errorMessage": "invalid number of bytes for arc4.uint64"}, {"pc": [632], "errorMessage": "transaction type is axfer"}, {"pc": [369, 642, 798], "errorMessage": "transaction type is pay"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) def _parse_abi_args(args: object | None = None) -> list[object] | None: diff --git a/projects/hackalgo-frontend/src/Home.tsx b/projects/hackalgo-frontend/src/Home.tsx index f2af536..b4b9ad5 100644 --- a/projects/hackalgo-frontend/src/Home.tsx +++ b/projects/hackalgo-frontend/src/Home.tsx @@ -3,13 +3,15 @@ import React, { useState } from 'react' import ConnectWallet from './components/ConnectWallet' import CreatorPage from './pages/CreatorPage' import GalleryPage from './pages/GalleryPage' +import PortfolioPage from './pages/PortfolioPage' // Import the new page interface HomeProps {} const Home: React.FC = () => { const [openWalletModal, setOpenWalletModal] = useState(false) const { activeAddress } = useWallet() - const [activeTab, setActiveTab] = useState<'creator' | 'gallery'>('creator') + // Updated type to include 'portfolio' + const [activeTab, setActiveTab] = useState<'creator' | 'gallery' | 'portfolio'>('creator') const toggleWalletModal = () => { setOpenWalletModal(!openWalletModal) @@ -17,33 +19,41 @@ const Home: React.FC = () => { return (
-
+
-
Algo-Mint
+
ALGO-MINT
-
- - +
-
-
- {activeTab === 'creator' ? ( - - ) : ( - - )} +
+ {activeTab === 'creator' && } + {activeTab === 'gallery' && } + {activeTab === 'portfolio' && }
diff --git a/projects/hackalgo-frontend/src/hooks/useAlgoMint.ts b/projects/hackalgo-frontend/src/hooks/useAlgoMint.ts index c8809bd..1447fa7 100644 --- a/projects/hackalgo-frontend/src/hooks/useAlgoMint.ts +++ b/projects/hackalgo-frontend/src/hooks/useAlgoMint.ts @@ -193,13 +193,19 @@ export function useAlgoMint() { // - For sale: app holds the NFT // - Owned by you: connected wallet holds the NFT // - Otherwise: owner unknown (treated as not-for-sale) - const appInfo = await algod.accountAssetInformation(appAddr, assetId).do().catch(() => null) + const appInfo = await algod + .accountAssetInformation(appAddr, assetId) + .do() + .catch(() => null) const appHolds = (appInfo?.assetHolding?.amount ?? 0n) === 1n if (appHolds) return { assetId, owner: null } const sender = activeAddressRef.current if (sender) { - const youInfo = await algod.accountAssetInformation(sender, assetId).do().catch(() => null) + const youInfo = await algod + .accountAssetInformation(sender, assetId) + .do() + .catch(() => null) const youHold = (youInfo?.assetHolding?.amount ?? 0n) === 1n if (youHold) return { assetId, owner: sender } } @@ -234,13 +240,13 @@ export function useAlgoMint() { const client = await getClient() const sp = await algorand.client.algod.getTransactionParams().do() const mbrAmount = args.mbr_payment_micro_algo ?? algo(1).microAlgo - const mbrPaymentTxn = algosdk.makePaymentTxnWithSuggestedParamsFromObject({ - sender, - receiver: client.appAddress, - amount: mbrAmount, - suggestedParams: sp, - note: uniqueNote('mbr_payment'), - }) + const mbrPaymentTxn = algosdk.makePaymentTxnWithSuggestedParamsFromObject({ + sender, + receiver: client.appAddress, + amount: mbrAmount, + suggestedParams: sp, + note: uniqueNote('mbr_payment'), + }) const group = client.newGroup() group.mintFutureNft({ @@ -321,7 +327,10 @@ export function useAlgoMint() { if (payoutPerNft === 0n) return 0 // Confirm address holds the NFT - const hold = await algorand.client.algod.accountAssetInformation(args.address, args.asset_id).do().catch(() => null) + const hold = await algorand.client.algod + .accountAssetInformation(args.address, args.asset_id) + .do() + .catch(() => null) const owns = (hold?.assetHolding?.amount ?? 0n) === 1n if (!owns) return 0 @@ -403,17 +412,7 @@ export function useAlgoMint() { report_income, resetMock, }), - [ - creatorAddressValue, - listNfts, - mint_future_nft, - buy_nft, - get_pending_payout, - claim_payout, - report_income, - resetMock, - termsValue, - ], + [creatorAddressValue, listNfts, mint_future_nft, buy_nft, get_pending_payout, claim_payout, report_income, resetMock, termsValue], ) return api diff --git a/projects/hackalgo-frontend/src/pages/PortfolioPage.tsx b/projects/hackalgo-frontend/src/pages/PortfolioPage.tsx new file mode 100644 index 0000000..5fa57fd --- /dev/null +++ b/projects/hackalgo-frontend/src/pages/PortfolioPage.tsx @@ -0,0 +1,116 @@ +import { useAlgoMint } from '../hooks/useAlgoMint' +import { useMemo } from 'react' + +// Hardcoded historical data for the demo +const historicalPerformance = [ + { quarter: 'Q1', revenue: 4500, payout: 450 }, + { quarter: 'Q2', revenue: 7200, payout: 720 }, + { quarter: 'Q3', revenue: 5800, payout: 580 }, +] + +export default function PortfolioPage() { + const { terms, creatorAddress } = useAlgoMint() + + const stats = useMemo( + () => ({ + totalRevenue: historicalPerformance.reduce((acc, curr) => acc + curr.revenue, 0), + avgYield: '8.4%', + projectStatus: terms ? 'Active' : 'Not Initialized', + }), + [terms], + ) + + return ( +
+ {/* Metrics Row */} +
+
+
Total Platform Revenue
+
{stats.totalRevenue} ALGO
+
Historical + Live Data
+
+
+
Average Annual Yield
+
{stats.avgYield}
+
Across all FENFTs
+
+
+
Project Status
+
{stats.projectStatus}
+
+
+ +
+
+

+ SECURE + On-Chain Safety Check +

+
+
+ Atomic Payment Enforcement + ✔ Verified +
+
+ Immutable Revenue Share + ✔ Locked +
+
+ Box Storage Allocation + ✔ Funded +
+
+
+
+ + {/* Graphical Representation (Hardcoded for Demo) */} +
+
+

Revenue Distribution

+ {/* FIX: Ensure flex items stretch and parent has a relative height */} +
+ {historicalPerformance.map((data, i) => ( +
+ {/* Label for value on hover */} + {data.revenue} + {/* THE BAR: Using min-height and background color explicitly */} +
+ {data.quarter} +
+ ))} + {/*Projected column */} +
+ Projected +
+ NEXT +
+
+
+
+ + {/* Live Data Footer */} +
+ + + +
+

On-Chain Config

+
+ Creator: {creatorAddress || 'Not linked'} | Revenue Share: {terms ? terms.total_pct_bps / 100 : 0}% +
+
+
+
+ ) +}