{ "name": "XGovRegistry", "structs": { "ProposerBoxValue": [ { "name": "active_proposal", "type": "bool" }, { "name": "kyc_status", "type": "bool" }, { "name": "kyc_expiring", "type": "uint64" } ], "TypedGlobalState": [ { "name": "paused_registry", "type": "bool" }, { "name": "paused_proposals", "type": "bool" }, { "name": "xgov_manager", "type": "address" }, { "name": "xgov_payor", "type": "address" }, { "name": "xgov_council", "type": "address" }, { "name": "xgov_subscriber", "type": "address" }, { "name": "kyc_provider", "type": "address" }, { "name": "committee_manager", "type": "address" }, { "name": "xgov_daemon", "type": "address" }, { "name": "xgov_fee", "type": "uint64" }, { "name": "proposer_fee", "type": "uint64" }, { "name": "open_proposal_fee", "type": "uint64" }, { "name": "daemon_ops_funding_bps", "type": "uint64" }, { "name": "proposal_commitment_bps", "type": "uint64" }, { "name": "min_requested_amount", "type": "uint64" }, { "name": "max_requested_amount", "type": "uint64[3]" }, { "name": "discussion_duration", "type": "uint64[4]" }, { "name": "voting_duration", "type": "uint64[4]" }, { "name": "quorum", "type": "uint64[3]" }, { "name": "weighted_quorum", "type": "uint64[3]" }, { "name": "outstanding_funds", "type": "uint64" }, { "name": "pending_proposals", "type": "uint64" }, { "name": "committee_id", "type": "byte[32]" }, { "name": "committee_members", "type": "uint64" }, { "name": "committee_votes", "type": "uint64" }, { "name": "absence_tolerance", "type": "uint64" }, { "name": "governance_period", "type": "uint64" }, { "name": "committee_grace_period", "type": "uint64" }, { "name": "committee_last_anchor", "type": "uint64" } ], "XGovBoxValue": [ { "name": "voting_address", "type": "address" }, { "name": "tolerated_absences", "type": "uint64" }, { "name": "last_vote_timestamp", "type": "uint64" }, { "name": "subscription_round", "type": "uint64" } ], "XGovRegistryConfig": [ { "name": "xgov_fee", "type": "uint64" }, { "name": "proposer_fee", "type": "uint64" }, { "name": "open_proposal_fee", "type": "uint64" }, { "name": "daemon_ops_funding_bps", "type": "uint64" }, { "name": "proposal_commitment_bps", "type": "uint64" }, { "name": "min_requested_amount", "type": "uint64" }, { "name": "max_requested_amount", "type": "uint64[3]" }, { "name": "discussion_duration", "type": "uint64[4]" }, { "name": "voting_duration", "type": "uint64[4]" }, { "name": "quorum", "type": "uint64[3]" }, { "name": "weighted_quorum", "type": "uint64[3]" }, { "name": "absence_tolerance", "type": "uint64" }, { "name": "governance_period", "type": "uint64" }, { "name": "committee_grace_period", "type": "uint64" } ], "XGovSubscribeRequestBoxValue": [ { "name": "xgov_addr", "type": "address" }, { "name": "owner_addr", "type": "address" }, { "name": "relation_type", "type": "uint64" } ] }, "methods": [ { "name": "create", "args": [], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "desc": "Create the xGov Registry.", "events": [], "recommendations": {} }, { "name": "init_proposal_contract", "args": [ { "type": "uint64", "name": "size", "desc": "The size of the Proposal Approval Program contract" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Initializes the Proposal Approval Program contract.", "events": [], "recommendations": {} }, { "name": "load_proposal_contract", "args": [ { "type": "uint64", "name": "offset", "desc": "The offset in the Proposal Approval Program contract" }, { "type": "byte[]", "name": "data", "desc": "The data to load into the Proposal Approval Program contract" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Loads the Proposal Approval Program contract.", "events": [], "recommendations": {} }, { "name": "delete_proposal_contract_box", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Deletes the Proposal Approval Program contract box.", "events": [], "recommendations": {} }, { "name": "pause_registry", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Pauses the xGov Registry non-administrative methods.", "events": [], "recommendations": {} }, { "name": "pause_proposals", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Pauses the creation of new Proposals.", "events": [], "recommendations": {} }, { "name": "resume_registry", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Resumes the xGov Registry non-administrative methods.", "events": [], "recommendations": {} }, { "name": "resume_proposals", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Resumes the creation of new Proposals.", "events": [], "recommendations": {} }, { "name": "set_xgov_manager", "args": [ { "type": "address", "name": "manager", "desc": "Address of the new xGov Manager" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Sets the xGov Manager.", "events": [], "recommendations": {} }, { "name": "set_payor", "args": [ { "type": "address", "name": "payor", "desc": "Address of the new xGov Payor" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Sets the xGov Payor.", "events": [], "recommendations": {} }, { "name": "set_xgov_council", "args": [ { "type": "address", "name": "council", "desc": "Address of the new xGov Council" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Sets the xGov Council.", "events": [], "recommendations": {} }, { "name": "set_xgov_subscriber", "args": [ { "type": "address", "name": "subscriber", "desc": "Address of the new xGov Subscriber" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Sets the xGov Subscriber.", "events": [], "recommendations": {} }, { "name": "set_kyc_provider", "args": [ { "type": "address", "name": "provider", "desc": "Address of the new KYC Provider" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Sets the KYC provider.", "events": [], "recommendations": {} }, { "name": "set_committee_manager", "args": [ { "type": "address", "name": "manager", "desc": "Address of the new xGov Manager" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Sets the Committee Manager.", "events": [], "recommendations": {} }, { "name": "set_xgov_daemon", "args": [ { "type": "address", "name": "xgov_daemon", "desc": "Address of the new xGov Daemon" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Sets the xGov Daemon.", "events": [], "recommendations": {} }, { "name": "config_xgov_registry", "args": [ { "type": "(uint64,uint64,uint64,uint64,uint64,uint64,uint64[3],uint64[4],uint64[4],uint64[3],uint64[3],uint64,uint64,uint64)", "struct": "XGovRegistryConfig", "name": "config", "desc": "Configuration class containing the field data" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Sets the configuration of the xGov Registry.", "events": [], "recommendations": {} }, { "name": "update_xgov_registry", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "UpdateApplication" ] }, "readonly": false, "desc": "Updates the xGov Registry contract.", "events": [], "recommendations": {} }, { "name": "subscribe_xgov", "args": [ { "type": "address", "name": "voting_address", "desc": "The address of the voting account for the xGov" }, { "type": "pay", "name": "payment", "desc": "The payment transaction covering the xGov fee" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Subscribes the sender to being an xGov.", "events": [ { "name": "XGovSubscribed", "args": [ { "type": "address", "name": "xgov" }, { "type": "address", "name": "delegate" }, { "type": "uint64", "name": "round" } ], "desc": "An xGov subscribed (either through self-onboarding or managed onboarding)" } ], "recommendations": {} }, { "name": "unsubscribe_xgov", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Unsubscribes the sender from being an xGov.", "events": [ { "name": "XGovUnsubscribed", "args": [ { "type": "address", "name": "xgov" }, { "type": "uint64", "name": "round" } ], "desc": "An xGov unsubscribed (either through self-onboarding or managed onboarding)" } ], "recommendations": {} }, { "name": "unsubscribe_absentee", "args": [ { "type": "address", "name": "xgov_address", "desc": "(Account): The address of the absentee xGov to unsubscribe" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Unsubscribes an absentee xGov. This is a temporary method used only for the\nfirst absentees removal at the inception of the absenteeism penalty.", "events": [ { "name": "XGovUnsubscribed", "args": [ { "type": "address", "name": "xgov" }, { "type": "uint64", "name": "round" } ], "desc": "An xGov unsubscribed (either through self-onboarding or managed onboarding)" } ], "recommendations": {} }, { "name": "request_subscribe_xgov", "args": [ { "type": "address", "name": "xgov_address", "desc": "The address of the xGov" }, { "type": "address", "name": "owner_address", "desc": "The address of the xGov Address owner/controller (Voting Address)" }, { "type": "uint64", "name": "relation_type", "desc": "The type of relationship enum" }, { "type": "pay", "name": "payment", "desc": "The payment transaction covering the xGov fee" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Requests to subscribe to the xGov.", "events": [], "recommendations": {} }, { "name": "approve_subscribe_xgov", "args": [ { "type": "uint64", "name": "request_id", "desc": "The ID of the request to approve" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Approves a subscribe request to xGov.", "events": [ { "name": "XGovSubscribed", "args": [ { "type": "address", "name": "xgov" }, { "type": "address", "name": "delegate" }, { "type": "uint64", "name": "round" } ], "desc": "An xGov subscribed (either through self-onboarding or managed onboarding)" } ], "recommendations": {} }, { "name": "reject_subscribe_xgov", "args": [ { "type": "uint64", "name": "request_id", "desc": "The ID of the request to reject" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Rejects a subscribe request to xGov.", "events": [], "recommendations": {} }, { "name": "request_unsubscribe_xgov", "args": [ { "type": "address", "name": "xgov_address", "desc": "The address of the xGov" }, { "type": "address", "name": "owner_address", "desc": "The address of the xGov Address owner/controller" }, { "type": "uint64", "name": "relation_type", "desc": "The type of relationship enum" }, { "type": "pay", "name": "payment", "desc": "The payment transaction covering the xGov (unsubscribe) fee" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Requests to unsubscribe from the xGov.", "events": [], "recommendations": {} }, { "name": "approve_unsubscribe_xgov", "args": [ { "type": "uint64", "name": "request_id", "desc": "The ID of the unsubscribe request to approve" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Approves a request to unsubscribe from xGov.", "events": [ { "name": "XGovUnsubscribed", "args": [ { "type": "address", "name": "xgov" }, { "type": "uint64", "name": "round" } ], "desc": "An xGov unsubscribed (either through self-onboarding or managed onboarding)" } ], "recommendations": {} }, { "name": "reject_unsubscribe_xgov", "args": [ { "type": "uint64", "name": "request_id", "desc": "The ID of the unsubscribe request to reject" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Rejects a request to unsubscribe from xGov.", "events": [], "recommendations": {} }, { "name": "set_voting_account", "args": [ { "type": "address", "name": "xgov_address", "desc": "The xGov address delegating voting power" }, { "type": "address", "name": "voting_address", "desc": "The voting account address to delegate voting power to" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Sets the Voting Address for the xGov.", "events": [], "recommendations": {} }, { "name": "subscribe_proposer", "args": [ { "type": "pay", "name": "payment", "desc": "The payment transaction covering the Proposer fee" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Subscribes the sender to being a Proposer.", "events": [ { "name": "ProposerSubscribed", "args": [ { "type": "address", "name": "proposer" }, { "type": "uint64", "name": "round" } ], "desc": "A Proposer subscribed" } ], "recommendations": {} }, { "name": "set_proposer_kyc", "args": [ { "type": "address", "name": "proposer", "desc": "The address of the Proposer" }, { "type": "bool", "name": "kyc_status", "desc": "The new status of the Proposer" }, { "type": "uint64", "name": "kyc_expiring", "desc": "The expiration date as a unix timestamp of the time the KYC expires" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Sets a proposer's KYC status.", "events": [ { "name": "ProposerKYC", "args": [ { "type": "address", "name": "proposer" }, { "type": "bool", "name": "valid_kyc" }, { "type": "uint64", "name": "round" } ], "desc": "A Proposer KYC status update" } ], "recommendations": {} }, { "name": "declare_committee", "args": [ { "type": "byte[32]", "name": "committee_id", "desc": "The ID of the xGov Committee" }, { "type": "uint64", "name": "size", "desc": "The size of the xGov Committee" }, { "type": "uint64", "name": "votes", "desc": "The voting power of the xGov Committee" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Sets the xGov Committee in charge.", "events": [ { "name": "NewCommittee", "args": [ { "type": "byte[32]", "name": "committee_id" }, { "type": "uint32", "name": "size" }, { "type": "uint32", "name": "votes" }, { "type": "uint64", "name": "round" } ], "desc": "A new xGov Committee has been elected" } ], "recommendations": {} }, { "name": "open_proposal", "args": [ { "type": "pay", "name": "payment", "desc": "payment for covering the proposal fee (includes child contract MBR)" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Creates a new Proposal.", "events": [ { "name": "NewProposal", "args": [ { "type": "uint64", "name": "proposal_id" }, { "type": "address", "name": "proposer" }, { "type": "uint64", "name": "round" } ], "desc": "A new Proposal has been opened" } ], "recommendations": {} }, { "name": "vote_proposal", "args": [ { "type": "uint64", "name": "proposal_id", "desc": "The application ID of the Proposal app being voted on" }, { "type": "address", "name": "xgov_address", "desc": "(Account): The address of the xGov being voted on behalf of" }, { "type": "uint64", "name": "approval_votes", "desc": "(UInt64): The number of approvals votes allocated" }, { "type": "uint64", "name": "rejection_votes", "desc": "(UInt64): The number of rejections votes allocated" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Votes on a Proposal.", "events": [], "recommendations": {} }, { "name": "unassign_absentee_from_proposal", "args": [ { "type": "uint64", "name": "proposal_id", "desc": "The application ID of the scrutinized Proposal" }, { "type": "address[]", "name": "absentees", "desc": "List of absentees to be unassigned" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Unassign absentees from a scrutinized Proposal.", "events": [ { "name": "XGovUnsubscribed", "args": [ { "type": "address", "name": "xgov" }, { "type": "uint64", "name": "round" } ], "desc": "An xGov unsubscribed (either through self-onboarding or managed onboarding)" } ], "recommendations": {} }, { "name": "pay_grant_proposal", "args": [ { "type": "uint64", "name": "proposal_id", "desc": "The application ID of the approved Proposal" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Disburses the funds for an approved Proposal.", "events": [], "recommendations": {} }, { "name": "finalize_proposal", "args": [ { "type": "uint64", "name": "proposal_id", "desc": "The application ID of the Proposal app to finalize" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Finalize a Proposal.", "events": [], "recommendations": {} }, { "name": "drop_proposal", "args": [ { "type": "uint64", "name": "proposal_id", "desc": "The application ID of the Proposal app to drop" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Drops a Proposal.", "events": [], "recommendations": {} }, { "name": "deposit_funds", "args": [ { "type": "pay", "name": "payment", "desc": "the deposit transaction" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Deposits xGov program funds into the xGov Treasury (xGov Registry Account).", "events": [], "recommendations": {} }, { "name": "withdraw_funds", "args": [ { "type": "uint64", "name": "amount", "desc": "the amount to remove" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Remove xGov program funds from the xGov Treasury (xGov Registry Account).", "events": [], "recommendations": {} }, { "name": "withdraw_available_funds", "args": [ { "type": "uint64", "name": "amount", "desc": "Amount to withdraw (in microALGO)" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Withdraw the available balance (excluding MBR and Proposals funds) from the xGov Registry.", "events": [], "recommendations": {} }, { "name": "get_available_funds", "args": [], "returns": { "type": "uint64", "desc": "The available funds in microALGO" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Get the available funds (excluding MBR and Proposals funds)", "events": [], "recommendations": {} }, { "name": "get_state", "args": [], "returns": { "type": "(bool,bool,address,address,address,address,address,address,address,uint64,uint64,uint64,uint64,uint64,uint64,uint64[3],uint64[4],uint64[4],uint64[3],uint64[3],uint64,uint64,byte[32],uint64,uint64,uint64,uint64,uint64,uint64)", "struct": "TypedGlobalState" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Returns the xGov Registry state.", "events": [], "recommendations": {} }, { "name": "get_xgov_box", "args": [ { "type": "address", "name": "xgov_address", "desc": "The address of the xGov" } ], "returns": { "type": "((address,uint64,uint64,uint64),bool)", "desc": "The xGov box value bool: `True` if xGov box exists, else `False`" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Returns the xGov box for the given address.", "events": [], "recommendations": {} }, { "name": "get_proposer_box", "args": [ { "type": "address", "name": "proposer_address", "desc": "The address of the Proposer" } ], "returns": { "type": "((bool,bool,uint64),bool)", "desc": "The Proposer box value bool: `True` if Proposer box exists, else `False`" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Returns the Proposer box for the given address.", "events": [], "recommendations": {} }, { "name": "get_request_box", "args": [ { "type": "uint64", "name": "request_id", "desc": "The ID of the subscribe request" } ], "returns": { "type": "((address,address,uint64),bool)", "desc": "The subscribe request box value bool: `True` if xGov subscribe request box exists, else `False`" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Returns the xGov subscribe request box for the given request ID.", "events": [], "recommendations": {} }, { "name": "get_request_unsubscribe_box", "args": [ { "type": "uint64", "name": "request_id", "desc": "The ID of the unsubscribe request" } ], "returns": { "type": "((address,address,uint64),bool)", "desc": "The unsubscribe request box value bool: `True` if xGov unsubscribe request box exists, else `False`" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Returns the xGov unsubscribe request box for the given unsubscribe request ID.", "events": [], "recommendations": {} }, { "name": "is_proposal", "args": [ { "type": "uint64", "name": "proposal_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "op_up", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "desc": "xGov Registry Contract", "networks": {}, "state": { "schema": { "global": { "ints": 36, "bytes": 28 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "xgov_manager": { "keyType": "AVMBytes", "valueType": "address", "key": "eGdvdl9tYW5hZ2Vy" }, "xgov_subscriber": { "keyType": "AVMBytes", "valueType": "address", "key": "eGdvdl9zdWJzY3JpYmVy" }, "xgov_payor": { "keyType": "AVMBytes", "valueType": "address", "key": "eGdvdl9wYXlvcg==" }, "xgov_council": { "keyType": "AVMBytes", "valueType": "address", "key": "eGdvdl9jb3VuY2ls" }, "kyc_provider": { "keyType": "AVMBytes", "valueType": "address", "key": "a3ljX3Byb3ZpZGVy" }, "committee_manager": { "keyType": "AVMBytes", "valueType": "address", "key": "Y29tbWl0dGVlX21hbmFnZXI=" }, "xgov_daemon": { "keyType": "AVMBytes", "valueType": "address", "key": "eGdvdl9kYWVtb24=" }, "paused_registry": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cGF1c2VkX3JlZ2lzdHJ5" }, "paused_proposals": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cGF1c2VkX3Byb3Bvc2Fscw==" }, "outstanding_funds": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "b3V0c3RhbmRpbmdfZnVuZHM=" }, "xgov_fee": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "eGdvdl9mZWU=" }, "proposer_fee": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cHJvcG9zZXJfZmVl" }, "open_proposal_fee": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "b3Blbl9wcm9wb3NhbF9mZWU=" }, "daemon_ops_funding_bps": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "ZGFlbW9uX29wZXJhdGlvbl9mdW5kaW5nX2Jwcw==" }, "proposal_commitment_bps": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cHJvcG9zYWxfY29tbWl0bWVudF9icHM=" }, "min_requested_amount": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "bWluX3JlcXVlc3RlZF9hbW91bnQ=" }, "max_requested_amount_small": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "bWF4X3JlcXVlc3RlZF9hbW91bnRfc21hbGw=" }, "max_requested_amount_medium": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "bWF4X3JlcXVlc3RlZF9hbW91bnRfbWVkaXVt" }, "max_requested_amount_large": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "bWF4X3JlcXVlc3RlZF9hbW91bnRfbGFyZ2U=" }, "discussion_duration_small": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "ZGlzY3Vzc2lvbl9kdXJhdGlvbl9zbWFsbA==" }, "discussion_duration_medium": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "ZGlzY3Vzc2lvbl9kdXJhdGlvbl9tZWRpdW0=" }, "discussion_duration_large": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "ZGlzY3Vzc2lvbl9kdXJhdGlvbl9sYXJnZQ==" }, "discussion_duration_xlarge": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "ZGlzY3Vzc2lvbl9kdXJhdGlvbl94bGFyZ2U=" }, "voting_duration_small": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "dm90aW5nX2R1cmF0aW9uX3NtYWxs" }, "voting_duration_medium": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "dm90aW5nX2R1cmF0aW9uX21lZGl1bQ==" }, "voting_duration_large": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "dm90aW5nX2R1cmF0aW9uX2xhcmdl" }, "voting_duration_xlarge": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "dm90aW5nX2R1cmF0aW9uX3hsYXJnZQ==" }, "quorum_small": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cXVvcnVtX3NtYWxs" }, "quorum_medium": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cXVvcnVtX21lZGl1bQ==" }, "quorum_large": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cXVvcnVtX2xhcmdl" }, "weighted_quorum_small": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "d2VpZ2h0ZWRfcXVvcnVtX3NtYWxs" }, "weighted_quorum_medium": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "d2VpZ2h0ZWRfcXVvcnVtX21lZGl1bQ==" }, "weighted_quorum_large": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "d2VpZ2h0ZWRfcXVvcnVtX2xhcmdl" }, "committee_id": { "keyType": "AVMBytes", "valueType": "byte[32]", "key": "Y29tbWl0dGVlX2lk" }, "committee_members": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "Y29tbWl0dGVlX21lbWJlcnM=" }, "committee_votes": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "Y29tbWl0dGVlX3ZvdGVz" }, "max_committee_size": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "bWF4X2NvbW1pdHRlZV9zaXpl" }, "xgovs": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "eGdvdnM=" }, "pending_proposals": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cGVuZGluZ19wcm9wb3NhbHM=" }, "request_id": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cmVxdWVzdF9pZA==" }, "absence_tolerance": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "YWJzZW5jZV90b2xlcmFuY2U=" }, "governance_period": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "Z292ZXJuYW5jZV9wZXJpb2Q=" }, "committee_grace_period": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "Y29tbWl0dGVlX2dyYWNlX3BlcmlvZA==" }, "committee_last_anchor": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "Y29tbWl0dGVlX2xhc3RfYW5jaG9y" } }, "local": {}, "box": { "proposal_approval_program": { "keyType": "AVMBytes", "valueType": "AVMBytes", "key": "cGE=" } } }, "maps": { "global": {}, "local": {}, "box": { "xgov_box": { "keyType": "address", "valueType": "XGovBoxValue", "prefix": "eA==" }, "request_box": { "keyType": "uint64", "valueType": "XGovSubscribeRequestBoxValue", "prefix": "cg==" }, "request_unsubscribe_box": { "keyType": "uint64", "valueType": "XGovSubscribeRequestBoxValue", "prefix": "cnU=" }, "proposer_box": { "keyType": "address", "valueType": "ProposerBoxValue", "prefix": "cA==" }, "voters": { "keyType": "address", "valueType": "uint64", "prefix": "Vg==" } } } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 4243 ], "errorMessage": "Address length is 32 bytes" }, { "pc": [ 1826 ], "errorMessage": "Already a proposer" }, { "pc": [ 1382, 1505, 1578, 4388 ], "errorMessage": "Already an xGov" }, { "pc": [ 2131 ], "errorMessage": "Committee is stale" }, { "pc": [ 2010 ], "errorMessage": "Committee size is too large" }, { "pc": [ 2099 ], "errorMessage": "Creation of proposals is paused" }, { "pc": [ 1031 ], "errorMessage": "Inconsistent discussion duration config" }, { "pc": [ 1116 ], "errorMessage": "Inconsistent quorum config" }, { "pc": [ 927 ], "errorMessage": "Inconsistent requested amount config" }, { "pc": [ 1087 ], "errorMessage": "Inconsistent voting duration config" }, { "pc": [ 1145 ], "errorMessage": "Inconsistent weighted quorum config" }, { "pc": [ 2164, 3447, 3495 ], "errorMessage": "Insufficient fee" }, { "pc": [ 3438, 3502, 4263 ], "errorMessage": "Insufficient funds" }, { "pc": [ 2911 ], "errorMessage": "Insufficient treasury funds" }, { "pc": [ 2155, 2901 ], "errorMessage": "Invalid KYC" }, { "pc": [ 964 ], "errorMessage": "Invalid open proposal fee" }, { "pc": [ 1386, 1509, 1666 ], "errorMessage": "Invalid payment" }, { "pc": [ 2412, 2655, 2861, 3088, 3268, 4150 ], "errorMessage": "Invalid proposal" }, { "pc": [ 2204 ], "errorMessage": "Invalid proposal approval program size" }, { "pc": [ 873 ], "errorMessage": "Invalid proposer fee" }, { "pc": [ 859 ], "errorMessage": "Invalid xGov fee" }, { "pc": [ 2887, 3062, 4238 ], "errorMessage": "Missing key in state" }, { "pc": [ 2192 ], "errorMessage": "Missing proposal approval program" }, { "pc": [ 2427 ], "errorMessage": "Must be xgov or voting address" }, { "pc": [ 1408, 1438, 1662, 1729, 1789, 2421, 4451 ], "errorMessage": "Not an xGov" }, { "pc": [ 2149 ], "errorMessage": "Proposer already has an active proposal" }, { "pc": [ 1911 ], "errorMessage": "Proposer does not exist" }, { "pc": [ 1373, 1400, 1429, 1496, 1654, 1780, 1817, 2092, 2406, 2649, 3263 ], "errorMessage": "Registry's non-admin methods are paused" }, { "pc": [ 3225 ], "errorMessage": "There are voters assigned to this proposal" }, { "pc": [ 584, 636, 647, 657, 666, 676, 685, 703, 721, 739, 757, 775, 793, 811, 837, 1347, 1444, 1490, 1553, 1598, 1648, 1710, 1749, 1795, 1902, 1996, 2139, 2856, 3082, 3276, 3430, 3486 ], "errorMessage": "Unauthorized" }, { "pc": [ 2588, 2597, 2747, 2754, 3017, 3023, 3224, 3231, 3363, 3369 ], "errorMessage": "Unknown error" }, { "pc": [ 2591, 2748 ], "errorMessage": "Voter not found" }, { "pc": [ 2590 ], "errorMessage": "Votes invalid" }, { "pc": [ 2589 ], "errorMessage": "Voting Period Expired" }, { "pc": [ 1999 ], "errorMessage": "Wrong Committee Members" }, { "pc": [ 2001 ], "errorMessage": "Wrong Committee Votes" }, { "pc": [ 10 ], "errorMessage": "Wrong Global Bytes allocation" }, { "pc": [ 16 ], "errorMessage": "Wrong Global UInts allocation" }, { "pc": [ 20 ], "errorMessage": "Wrong Local Bytes allocation" }, { "pc": [ 24 ], "errorMessage": "Wrong Local UInts allocation" }, { "pc": [ 2592, 2749, 3018, 3226, 3364 ], "errorMessage": "Wrong Proposal Status or finalized" }, { "pc": [ 1833, 2171, 3402 ], "errorMessage": "Wrong Receiver" }, { "pc": [ 1842, 2183 ], "errorMessage": "Wrong payment amount" }, { "pc": [ 2895 ], "errorMessage": "Wrong proposer" }, { "pc": [ 2188, 2282, 4249, 4254 ], "errorMessage": "account funded" }, { "pc": [ 2288, 4217 ], "errorMessage": "application exists" }, { "pc": [ 2486, 2687, 2962, 3119, 3305 ], "errorMessage": "application log value is not the result of an ABI return" }, { "pc": [ 2432, 3778, 4393 ], "errorMessage": "check self.absence_tolerance exists" }, { "pc": [ 2123, 3788 ], "errorMessage": "check self.committee_grace_period exists" }, { "pc": [ 3763 ], "errorMessage": "check self.committee_id exists" }, { "pc": [ 2114, 3793 ], "errorMessage": "check self.committee_last_anchor exists" }, { "pc": [ 1994, 3570 ], "errorMessage": "check self.committee_manager exists" }, { "pc": [ 3768 ], "errorMessage": "check self.committee_members exists" }, { "pc": [ 3773 ], "errorMessage": "check self.committee_votes exists" }, { "pc": [ 3595 ], "errorMessage": "check self.daemon_ops_funding_bps exists" }, { "pc": [ 3645 ], "errorMessage": "check self.discussion_duration_large exists" }, { "pc": [ 3640 ], "errorMessage": "check self.discussion_duration_medium exists" }, { "pc": [ 3635 ], "errorMessage": "check self.discussion_duration_small exists" }, { "pc": [ 3650 ], "errorMessage": "check self.discussion_duration_xlarge exists" }, { "pc": [ 3783, 4336 ], "errorMessage": "check self.governance_period exists" }, { "pc": [ 1900, 3565 ], "errorMessage": "check self.kyc_provider exists" }, { "pc": [ 2006 ], "errorMessage": "check self.max_committee_size exists" }, { "pc": [ 3620 ], "errorMessage": "check self.max_requested_amount_large exists" }, { "pc": [ 3615 ], "errorMessage": "check self.max_requested_amount_medium exists" }, { "pc": [ 3610 ], "errorMessage": "check self.max_requested_amount_small exists" }, { "pc": [ 3605 ], "errorMessage": "check self.min_requested_amount exists" }, { "pc": [ 2178, 3590 ], "errorMessage": "check self.open_proposal_fee exists" }, { "pc": [ 2906, 3407, 3435, 3753, 4260 ], "errorMessage": "check self.outstanding_funds exists" }, { "pc": [ 2097, 3540 ], "errorMessage": "check self.paused_proposals exists" }, { "pc": [ 1371, 1398, 1427, 1494, 1652, 1778, 1815, 2090, 2404, 2647, 3261, 3535 ], "errorMessage": "check self.paused_registry exists" }, { "pc": [ 2314, 3758, 4350 ], "errorMessage": "check self.pending_proposals exists" }, { "pc": [ 3600 ], "errorMessage": "check self.proposal_commitment_bps exists" }, { "pc": [ 2145, 4025, 4305, 4314 ], "errorMessage": "check self.proposer_box entry exists" }, { "pc": [ 1840, 3585 ], "errorMessage": "check self.proposer_fee exists" }, { "pc": [ 3713 ], "errorMessage": "check self.quorum_large exists" }, { "pc": [ 3708 ], "errorMessage": "check self.quorum_medium exists" }, { "pc": [ 3703 ], "errorMessage": "check self.quorum_small exists" }, { "pc": [ 1561, 4071 ], "errorMessage": "check self.request_box entry exists" }, { "pc": [ 1514, 1671 ], "errorMessage": "check self.request_id exists" }, { "pc": [ 1718, 4117 ], "errorMessage": "check self.request_unsubscribe_box entry exists" }, { "pc": [ 3679 ], "errorMessage": "check self.voting_duration_large exists" }, { "pc": [ 3674 ], "errorMessage": "check self.voting_duration_medium exists" }, { "pc": [ 3669 ], "errorMessage": "check self.voting_duration_small exists" }, { "pc": [ 3684 ], "errorMessage": "check self.voting_duration_xlarge exists" }, { "pc": [ 3738 ], "errorMessage": "check self.weighted_quorum_large exists" }, { "pc": [ 3733 ], "errorMessage": "check self.weighted_quorum_medium exists" }, { "pc": [ 3728 ], "errorMessage": "check self.weighted_quorum_small exists" }, { "pc": [ 2792, 2802, 3926, 4198 ], "errorMessage": "check self.xgov_box entry exists" }, { "pc": [ 3555 ], "errorMessage": "check self.xgov_council exists" }, { "pc": [ 3080, 3575 ], "errorMessage": "check self.xgov_daemon exists" }, { "pc": [ 3580, 4287 ], "errorMessage": "check self.xgov_fee exists" }, { "pc": [ 3460, 3545, 4159 ], "errorMessage": "check self.xgov_manager exists" }, { "pc": [ 3508, 3550, 4168 ], "errorMessage": "check self.xgov_payor exists" }, { "pc": [ 3560, 4177 ], "errorMessage": "check self.xgov_subscriber exists" }, { "pc": [ 4413, 4458 ], "errorMessage": "check self.xgovs exists" }, { "pc": [ 2773 ], "errorMessage": "index access is out of bounds" }, { "pc": [ 1799, 2333, 2439, 2446, 2813, 4374 ], "errorMessage": "index out of bounds" }, { "pc": [ 621, 2493, 2630, 2694, 2969, 3126, 3312 ], "errorMessage": "invalid array length header" }, { "pc": [ 1882 ], "errorMessage": "invalid number of bytes for arc4.bool" }, { "pc": [ 2643 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 629 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 699, 717, 735, 753, 771, 789, 807, 1357, 1423, 1457, 1465, 1615, 1623, 1766, 1774, 1874, 1969, 2384, 3911, 4010 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 579, 614, 1473, 1548, 1593, 1631, 1705, 1744, 1892, 1977, 1986, 2375, 2392, 2400, 2620, 2851, 3044, 3255, 3425, 3481, 4053, 4099, 4145 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 833 ], "errorMessage": "invalid number of bytes for smart_contracts.common.abi_types.XGovRegistryConfig" }, { "pc": [ 2500, 2701, 2976, 3133, 3319 ], "errorMessage": "invalid number of bytes for string" }, { "pc": [ 2039, 2049 ], "errorMessage": "overflow" }, { "pc": [ 1367, 1484, 1642, 1811, 2086, 3395 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "cblocks" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMzIgOCAyMDQ4CiAgICBieXRlY2Jsb2NrIDB4NzA2MTc1NzM2NTY0NWY3MjY1Njc2OTczNzQ3Mjc5IDB4NzggMHgxNTFmN2M3NSAweDcwIDB4NmY3NTc0NzM3NDYxNmU2NDY5NmU2NzVmNjY3NTZlNjQ3MyAweDcwNjEgMHgwMCAweDc4Njc2Zjc2NWY2ZDYxNmU2MTY3NjU3MiAweDcwNjU2ZTY0Njk2ZTY3NWY3MDcyNmY3MDZmNzM2MTZjNzMgMHg3ODY3NmY3NjVmNzA2MTc5NmY3MiAweDcwNjE3NTczNjU2NDVmNzA3MjZmNzA2ZjczNjE2YzczIDB4Nzg2NzZmNzY3MyAweDcyNjU3MTc1NjU3Mzc0NWY2OTY0ICJXcm9uZyBQcm9wb3NhbCBTdGF0dXMgb3IgZmluYWxpemVkIiAiRVJSOiIgMHg3ODY3NmY3NjVmNzM3NTYyNzM2MzcyNjk2MjY1NzIgMHg2Yjc5NjM1ZjcwNzI2Zjc2Njk2NDY1NzIgMHg2MzZmNmQ2ZDY5NzQ3NDY1NjU1ZjZkNjE2ZTYxNjc2NTcyIDB4Nzg2NzZmNzY1ZjY0NjE2NTZkNmY2ZSAweDc4Njc2Zjc2NWY2NjY1NjUgMHg3MDcyNmY3MDZmNzM2NTcyNWY2NjY1NjUgMHg2ZjcwNjU2ZTVmNzA3MjZmNzA2ZjczNjE2YzVmNjY2NTY1IDB4NjE2MjczNjU2ZTYzNjU1Zjc0NmY2YzY1NzI2MTZlNjM2NSAweDcyIDB4NzI3NSAweDc4Njc2Zjc2NWY2MzZmNzU2ZTYzNjk2YyAweDY0NjE2NTZkNmY2ZTVmNmY3MDY1NzI2MTc0Njk2ZjZlNWY2Njc1NmU2NDY5NmU2NzVmNjI3MDczIDB4NzA3MjZmNzA2ZjczNjE2YzVmNjM2ZjZkNmQ2OTc0NmQ2NTZlNzQ1ZjYyNzA3MyAweDZkNjk2ZTVmNzI2NTcxNzU2NTczNzQ2NTY0NWY2MTZkNmY3NTZlNzQgMHg2ZDYxNzg1ZjcyNjU3MTc1NjU3Mzc0NjU2NDVmNjE2ZDZmNzU2ZTc0NWY3MzZkNjE2YzZjIDB4NmQ2MTc4NWY3MjY1NzE3NTY1NzM3NDY1NjQ1ZjYxNmQ2Zjc1NmU3NDVmNmQ2NTY0Njk3NTZkIDB4NmQ2MTc4NWY3MjY1NzE3NTY1NzM3NDY1NjQ1ZjYxNmQ2Zjc1NmU3NDVmNmM2MTcyNjc2NSAweDY0Njk3MzYzNzU3MzczNjk2ZjZlNWY2NDc1NzI2MTc0Njk2ZjZlNWY3MzZkNjE2YzZjIDB4NjQ2OTczNjM3NTczNzM2OTZmNmU1ZjY0NzU3MjYxNzQ2OTZmNmU1ZjZkNjU2NDY5NzU2ZCAweDY0Njk3MzYzNzU3MzczNjk2ZjZlNWY2NDc1NzI2MTc0Njk2ZjZlNWY2YzYxNzI2NzY1IDB4NjQ2OTczNjM3NTczNzM2OTZmNmU1ZjY0NzU3MjYxNzQ2OTZmNmU1Zjc4NmM2MTcyNjc2NSAweDc2NmY3NDY5NmU2NzVmNjQ3NTcyNjE3NDY5NmY2ZTVmNzM2ZDYxNmM2YyAweDc2NmY3NDY5NmU2NzVmNjQ3NTcyNjE3NDY5NmY2ZTVmNmQ2NTY0Njk3NTZkIDB4NzY2Zjc0Njk2ZTY3NWY2NDc1NzI2MTc0Njk2ZjZlNWY2YzYxNzI2NzY1IDB4NzY2Zjc0Njk2ZTY3NWY2NDc1NzI2MTc0Njk2ZjZlNWY3ODZjNjE3MjY3NjUgMHg3MTc1NmY3Mjc1NmQ1ZjczNmQ2MTZjNmMgMHg3MTc1NmY3Mjc1NmQ1ZjZkNjU2NDY5NzU2ZCAweDcxNzU2ZjcyNzU2ZDVmNmM2MTcyNjc2NSAweDc3NjU2OTY3Njg3NDY1NjQ1ZjcxNzU2ZjcyNzU2ZDVmNzM2ZDYxNmM2YyAweDc3NjU2OTY3Njg3NDY1NjQ1ZjcxNzU2ZjcyNzU2ZDVmNmQ2NTY0Njk3NTZkIDB4Nzc2NTY5Njc2ODc0NjU2NDVmNzE3NTZmNzI3NTZkNWY2YzYxNzI2NzY1IDB4NjM2ZjZkNmQ2OTc0NzQ2NTY1NWY2ZDY1NmQ2MjY1NzI3MyAweDYzNmY2ZDZkNjk3NDc0NjU2NTVmNzY2Zjc0NjU3MyAweDZkNjE3ODVmNjM2ZjZkNmQ2OTc0NzQ2NTY1NWY3MzY5N2E2NSAweDY3NmY3NjY1NzI2ZTYxNmU2MzY1NWY3MDY1NzI2OTZmNjQgMHg2MzZmNmQ2ZDY5NzQ3NDY1NjU1ZjY3NzI2MTYzNjU1ZjcwNjU3MjY5NmY2NCAweDYzNmY2ZDZkNjk3NDc0NjU2NTVmNmM2MTczNzQ1ZjYxNmU2MzY4NmY3MiAweDAwMDAwMDAwMDAwMDAwMDAwMCAweDYzNmY2ZDZkNjk3NDc0NjU2NTVmNjk2NCAiVm90ZXIgbm90IGZvdW5kIiBiYXNlMzIoQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEpIFRNUExfZW50cm9weQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NTctNTgKICAgIC8vICMgUHJlY29uZGl0aW9ucwogICAgLy8gYXNzZXJ0IFR4bi5nbG9iYWxfbnVtX2J5dGVfc2xpY2UgPT0gY2ZnLkdMT0JBTF9CWVRFUywgZXJyLldST05HX0dMT0JBTF9CWVRFUwogICAgdHhuIEdsb2JhbE51bUJ5dGVTbGljZQogICAgcHVzaGludCAyOAogICAgPT0KICAgIGFzc2VydCAvLyBXcm9uZyBHbG9iYWwgQnl0ZXMgYWxsb2NhdGlvbgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NTkKICAgIC8vIGFzc2VydCBUeG4uZ2xvYmFsX251bV91aW50ID09IGNmZy5HTE9CQUxfVUlOVFMsIGVyci5XUk9OR19HTE9CQUxfVUlOVFMKICAgIHR4biBHbG9iYWxOdW1VaW50CiAgICBwdXNoaW50IDM2CiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIEdsb2JhbCBVSW50cyBhbGxvY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2MAogICAgLy8gYXNzZXJ0IFR4bi5sb2NhbF9udW1fYnl0ZV9zbGljZSA9PSBjZmcuTE9DQUxfQllURVMsIGVyci5XUk9OR19MT0NBTF9CWVRFUwogICAgdHhuIExvY2FsTnVtQnl0ZVNsaWNlCiAgICAhCiAgICBhc3NlcnQgLy8gV3JvbmcgTG9jYWwgQnl0ZXMgYWxsb2NhdGlvbgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NjEKICAgIC8vIGFzc2VydCBUeG4ubG9jYWxfbnVtX3VpbnQgPT0gY2ZnLkxPQ0FMX1VJTlRTLCBlcnIuV1JPTkdfTE9DQUxfVUlOVFMKICAgIHR4biBMb2NhbE51bVVpbnQKICAgICEKICAgIGFzc2VydCAvLyBXcm9uZyBMb2NhbCBVSW50cyBhbGxvY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2My02NAogICAgLy8gIyBSb2xlLUJhc2VkIEFjY2VzcyBDb250cm9sIChSQkFDKQogICAgLy8gc2VsZi54Z292X21hbmFnZXIgPSBHbG9iYWxTdGF0ZShBY2NvdW50KCksIGtleT1jZmcuR1NfS0VZX1hHT1ZfTUFOQUdFUikKICAgIGJ5dGVjIDcgLy8gMHg3ODY3NmY3NjVmNmQ2MTZlNjE2NzY1NzIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY1CiAgICAvLyBzZWxmLnhnb3Zfc3Vic2NyaWJlciA9IEdsb2JhbFN0YXRlKEFjY291bnQoKSwga2V5PWNmZy5HU19LRVlfWEdPVl9TVUJTQ1JJQkVSKQogICAgYnl0ZWMgMTUgLy8gMHg3ODY3NmY3NjVmNzM3NTYyNzM2MzcyNjk2MjY1NzIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY2CiAgICAvLyBzZWxmLnhnb3ZfcGF5b3IgPSBHbG9iYWxTdGF0ZShBY2NvdW50KCksIGtleT1jZmcuR1NfS0VZX1hHT1ZfUEFZT1IpCiAgICBieXRlYyA5IC8vIDB4Nzg2NzZmNzY1ZjcwNjE3OTZmNzIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY3CiAgICAvLyBzZWxmLnhnb3ZfY291bmNpbCA9IEdsb2JhbFN0YXRlKEFjY291bnQoKSwga2V5PWNmZy5HU19LRVlfWEdPVl9DT1VOQ0lMKQogICAgYnl0ZWMgMjUgLy8gMHg3ODY3NmY3NjVmNjM2Zjc1NmU2MzY5NmMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY4CiAgICAvLyBzZWxmLmt5Y19wcm92aWRlciA9IEdsb2JhbFN0YXRlKEFjY291bnQoKSwga2V5PWNmZy5HU19LRVlfS1lDX1BST1ZJREVSKQogICAgYnl0ZWMgMTYgLy8gMHg2Yjc5NjM1ZjcwNzI2Zjc2Njk2NDY1NzIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcwCiAgICAvLyBBY2NvdW50KCksIGtleT1jZmcuR1NfS0VZX0NPTU1JVFRFRV9NQU5BR0VSCiAgICBieXRlYyAxNyAvLyAweDYzNmY2ZDZkNjk3NDc0NjU2NTVmNmQ2MTZlNjE2NzY1NzIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NjktNzEKICAgIC8vIHNlbGYuY29tbWl0dGVlX21hbmFnZXIgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBBY2NvdW50KCksIGtleT1jZmcuR1NfS0VZX0NPTU1JVFRFRV9NQU5BR0VSCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NzIKICAgIC8vIHNlbGYueGdvdl9kYWVtb24gPSBHbG9iYWxTdGF0ZShBY2NvdW50KCksIGtleT1jZmcuR1NfS0VZX1hHT1ZfREFFTU9OKQogICAgYnl0ZWMgMTggLy8gMHg3ODY3NmY3NjVmNjQ2MTY1NmQ2ZjZlCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3NgogICAgLy8gRmFsc2UsIGtleT1jZmcuR1NfS0VZX1BBVVNFRF9SRUdJU1RSWSAgIyBub3FhOiBGQlQwMDMKICAgIGJ5dGVjXzAgLy8gMHg3MDYxNzU3MzY1NjQ1ZjcyNjU2NzY5NzM3NDcyNzkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3NC03NwogICAgLy8gIyBSZWdpc3RyeSBDb250cm9sIFN0YXRlcwogICAgLy8gc2VsZi5wYXVzZWRfcmVnaXN0cnkgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBGYWxzZSwga2V5PWNmZy5HU19LRVlfUEFVU0VEX1JFR0lTVFJZICAjIG5vcWE6IEZCVDAwMwogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojc5CiAgICAvLyBGYWxzZSwga2V5PWNmZy5HU19LRVlfUEFVU0VEX1BST1BPU0FMUyAgIyBub3FhOiBGQlQwMDMKICAgIGJ5dGVjIDEwIC8vIDB4NzA2MTc1NzM2NTY0NWY3MDcyNmY3MDZmNzM2MTZjNzMKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3OC04MAogICAgLy8gc2VsZi5wYXVzZWRfcHJvcG9zYWxzID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgRmFsc2UsIGtleT1jZmcuR1NfS0VZX1BBVVNFRF9QUk9QT1NBTFMgICMgbm9xYTogRkJUMDAzCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6ODItODMKICAgIC8vICMgeEdvdiBUcmVhc3VyeQogICAgLy8gc2VsZi5vdXRzdGFuZGluZ19mdW5kcyA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgpLCBrZXk9Y2ZnLkdTX0tFWV9PVVRTVEFORElOR19GVU5EUykKICAgIGJ5dGVjIDQgLy8gMHg2Zjc1NzQ3Mzc0NjE2ZTY0Njk2ZTY3NWY2Njc1NmU2NDczCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg1LTg2CiAgICAvLyAjIEZlZXMKICAgIC8vIHNlbGYueGdvdl9mZWUgPSBHbG9iYWxTdGF0ZShVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfWEdPVl9GRUUpCiAgICBieXRlYyAxOSAvLyAweDc4Njc2Zjc2NWY2NjY1NjUKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6ODcKICAgIC8vIHNlbGYucHJvcG9zZXJfZmVlID0gR2xvYmFsU3RhdGUoVUludDY0KCksIGtleT1jZmcuR1NfS0VZX1BST1BPU0VSX0ZFRSkKICAgIGJ5dGVjIDIwIC8vIDB4NzA3MjZmNzA2ZjczNjU3MjVmNjY2NTY1CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg4CiAgICAvLyBzZWxmLm9wZW5fcHJvcG9zYWxfZmVlID0gR2xvYmFsU3RhdGUoVUludDY0KCksIGtleT1jZmcuR1NfS0VZX09QRU5fUFJPUE9TQUxfRkVFKQogICAgYnl0ZWMgMjEgLy8gMHg2ZjcwNjU2ZTVmNzA3MjZmNzA2ZjczNjE2YzVmNjY2NTY1CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjkwCiAgICAvLyBVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfREFFTU9OX09QU19GVU5ESU5HX0JQUwogICAgYnl0ZWMgMjYgLy8gMHg2NDYxNjU2ZDZmNmU1ZjZmNzA2NTcyNjE3NDY5NmY2ZTVmNjY3NTZlNjQ2OTZlNjc1ZjYyNzA3MwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg5LTkxCiAgICAvLyBzZWxmLmRhZW1vbl9vcHNfZnVuZGluZ19icHMgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfREFFTU9OX09QU19GVU5ESU5HX0JQUwogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjkzCiAgICAvLyBVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfUFJPUE9TQUxfQ09NTUlUTUVOVF9CUFMKICAgIGJ5dGVjIDI3IC8vIDB4NzA3MjZmNzA2ZjczNjE2YzVmNjM2ZjZkNmQ2OTc0NmQ2NTZlNzQ1ZjYyNzA3MwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjkyLTk0CiAgICAvLyBzZWxmLnByb3Bvc2FsX2NvbW1pdG1lbnRfYnBzID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgVUludDY0KCksIGtleT1jZmcuR1NfS0VZX1BST1BPU0FMX0NPTU1JVE1FTlRfQlBTCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6OTgKICAgIC8vIFVJbnQ2NCgpLCBrZXk9Y2ZnLkdTX0tFWV9NSU5fUkVRVUVTVEVEX0FNT1VOVAogICAgYnl0ZWMgMjggLy8gMHg2ZDY5NmU1ZjcyNjU3MTc1NjU3Mzc0NjU2NDVmNjE2ZDZmNzU2ZTc0CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6OTYtOTkKICAgIC8vICMgUmVxdWVzdGVkIEFtb3VudCBMaW1pdHMKICAgIC8vIHNlbGYubWluX3JlcXVlc3RlZF9hbW91bnQgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfTUlOX1JFUVVFU1RFRF9BTU9VTlQKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMDIKICAgIC8vIFVJbnQ2NCgpLCBrZXk9Y2ZnLkdTX0tFWV9NQVhfUkVRVUVTVEVEX0FNT1VOVF9TTUFMTAogICAgYnl0ZWMgMjkgLy8gMHg2ZDYxNzg1ZjcyNjU3MTc1NjU3Mzc0NjU2NDVmNjE2ZDZmNzU2ZTc0NWY3MzZkNjE2YzZjCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTAxLTEwMwogICAgLy8gc2VsZi5tYXhfcmVxdWVzdGVkX2Ftb3VudF9zbWFsbCA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIFVJbnQ2NCgpLCBrZXk9Y2ZnLkdTX0tFWV9NQVhfUkVRVUVTVEVEX0FNT1VOVF9TTUFMTAogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwNQogICAgLy8gVUludDY0KCksIGtleT1jZmcuR1NfS0VZX01BWF9SRVFVRVNURURfQU1PVU5UX01FRElVTQogICAgYnl0ZWMgMzAgLy8gMHg2ZDYxNzg1ZjcyNjU3MTc1NjU3Mzc0NjU2NDVmNjE2ZDZmNzU2ZTc0NWY2ZDY1NjQ2OTc1NmQKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMDQtMTA2CiAgICAvLyBzZWxmLm1heF9yZXF1ZXN0ZWRfYW1vdW50X21lZGl1bSA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIFVJbnQ2NCgpLCBrZXk9Y2ZnLkdTX0tFWV9NQVhfUkVRVUVTVEVEX0FNT1VOVF9NRURJVU0KICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMDgKICAgIC8vIFVJbnQ2NCgpLCBrZXk9Y2ZnLkdTX0tFWV9NQVhfUkVRVUVTVEVEX0FNT1VOVF9MQVJHRQogICAgYnl0ZWMgMzEgLy8gMHg2ZDYxNzg1ZjcyNjU3MTc1NjU3Mzc0NjU2NDVmNjE2ZDZmNzU2ZTc0NWY2YzYxNzI2NzY1CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTA3LTEwOQogICAgLy8gc2VsZi5tYXhfcmVxdWVzdGVkX2Ftb3VudF9sYXJnZSA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIFVJbnQ2NCgpLCBrZXk9Y2ZnLkdTX0tFWV9NQVhfUkVRVUVTVEVEX0FNT1VOVF9MQVJHRQogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExMwogICAgLy8gVUludDY0KCksIGtleT1jZmcuR1NfS0VZX0RJU0NVU1NJT05fRFVSQVRJT05fU01BTEwKICAgIGJ5dGVjIDMyIC8vIDB4NjQ2OTczNjM3NTczNzM2OTZmNmU1ZjY0NzU3MjYxNzQ2OTZmNmU1ZjczNmQ2MTZjNmMKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTEtMTE0CiAgICAvLyAjIFRpbWUgTGltaXRzCiAgICAvLyBzZWxmLmRpc2N1c3Npb25fZHVyYXRpb25fc21hbGwgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfRElTQ1VTU0lPTl9EVVJBVElPTl9TTUFMTAogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExNgogICAgLy8gVUludDY0KCksIGtleT1jZmcuR1NfS0VZX0RJU0NVU1NJT05fRFVSQVRJT05fTUVESVVNCiAgICBieXRlYyAzMyAvLyAweDY0Njk3MzYzNzU3MzczNjk2ZjZlNWY2NDc1NzI2MTc0Njk2ZjZlNWY2ZDY1NjQ2OTc1NmQKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTUtMTE3CiAgICAvLyBzZWxmLmRpc2N1c3Npb25fZHVyYXRpb25fbWVkaXVtID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgVUludDY0KCksIGtleT1jZmcuR1NfS0VZX0RJU0NVU1NJT05fRFVSQVRJT05fTUVESVVNCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTE5CiAgICAvLyBVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfRElTQ1VTU0lPTl9EVVJBVElPTl9MQVJHRQogICAgYnl0ZWMgMzQgLy8gMHg2NDY5NzM2Mzc1NzM3MzY5NmY2ZTVmNjQ3NTcyNjE3NDY5NmY2ZTVmNmM2MTcyNjc2NQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExOC0xMjAKICAgIC8vIHNlbGYuZGlzY3Vzc2lvbl9kdXJhdGlvbl9sYXJnZSA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIFVJbnQ2NCgpLCBrZXk9Y2ZnLkdTX0tFWV9ESVNDVVNTSU9OX0RVUkFUSU9OX0xBUkdFCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTIyCiAgICAvLyBVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfRElTQ1VTU0lPTl9EVVJBVElPTl9YTEFSR0UKICAgIGJ5dGVjIDM1IC8vIDB4NjQ2OTczNjM3NTczNzM2OTZmNmU1ZjY0NzU3MjYxNzQ2OTZmNmU1Zjc4NmM2MTcyNjc2NQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyMS0xMjMKICAgIC8vIHNlbGYuZGlzY3Vzc2lvbl9kdXJhdGlvbl94bGFyZ2UgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfRElTQ1VTU0lPTl9EVVJBVElPTl9YTEFSR0UKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMjUKICAgIC8vIFVJbnQ2NCgpLCBrZXk9Y2ZnLkdTX0tFWV9WT1RJTkdfRFVSQVRJT05fU01BTEwKICAgIGJ5dGVjIDM2IC8vIDB4NzY2Zjc0Njk2ZTY3NWY2NDc1NzI2MTc0Njk2ZjZlNWY3MzZkNjE2YzZjCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTI0LTEyNgogICAgLy8gc2VsZi52b3RpbmdfZHVyYXRpb25fc21hbGwgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfVk9USU5HX0RVUkFUSU9OX1NNQUxMCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTI4CiAgICAvLyBVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfVk9USU5HX0RVUkFUSU9OX01FRElVTQogICAgYnl0ZWMgMzcgLy8gMHg3NjZmNzQ2OTZlNjc1ZjY0NzU3MjYxNzQ2OTZmNmU1ZjZkNjU2NDY5NzU2ZAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyNy0xMjkKICAgIC8vIHNlbGYudm90aW5nX2R1cmF0aW9uX21lZGl1bSA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIFVJbnQ2NCgpLCBrZXk9Y2ZnLkdTX0tFWV9WT1RJTkdfRFVSQVRJT05fTUVESVVNCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTMxCiAgICAvLyBVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfVk9USU5HX0RVUkFUSU9OX0xBUkdFCiAgICBieXRlYyAzOCAvLyAweDc2NmY3NDY5NmU2NzVmNjQ3NTcyNjE3NDY5NmY2ZTVmNmM2MTcyNjc2NQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzMC0xMzIKICAgIC8vIHNlbGYudm90aW5nX2R1cmF0aW9uX2xhcmdlID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgVUludDY0KCksIGtleT1jZmcuR1NfS0VZX1ZPVElOR19EVVJBVElPTl9MQVJHRQogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzNAogICAgLy8gVUludDY0KCksIGtleT1jZmcuR1NfS0VZX1ZPVElOR19EVVJBVElPTl9YTEFSR0UKICAgIGJ5dGVjIDM5IC8vIDB4NzY2Zjc0Njk2ZTY3NWY2NDc1NzI2MTc0Njk2ZjZlNWY3ODZjNjE3MjY3NjUKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMzMtMTM1CiAgICAvLyBzZWxmLnZvdGluZ19kdXJhdGlvbl94bGFyZ2UgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfVk9USU5HX0RVUkFUSU9OX1hMQVJHRQogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzNy0xMzgKICAgIC8vICMgUXVvcnVtcwogICAgLy8gc2VsZi5xdW9ydW1fc21hbGwgPSBHbG9iYWxTdGF0ZShVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfUVVPUlVNX1NNQUxMKQogICAgYnl0ZWMgNDAgLy8gMHg3MTc1NmY3Mjc1NmQ1ZjczNmQ2MTZjNmMKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQwCiAgICAvLyBVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfUVVPUlVNX01FRElVTQogICAgYnl0ZWMgNDEgLy8gMHg3MTc1NmY3Mjc1NmQ1ZjZkNjU2NDY5NzU2ZAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzOS0xNDEKICAgIC8vIHNlbGYucXVvcnVtX21lZGl1bSA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIFVJbnQ2NCgpLCBrZXk9Y2ZnLkdTX0tFWV9RVU9SVU1fTUVESVVNCiAgICAvLyApICAjIE5vIGxvbmdlciB1c2VkCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQyCiAgICAvLyBzZWxmLnF1b3J1bV9sYXJnZSA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgpLCBrZXk9Y2ZnLkdTX0tFWV9RVU9SVU1fTEFSR0UpCiAgICBieXRlYyA0MiAvLyAweDcxNzU2ZjcyNzU2ZDVmNmM2MTcyNjc2NQogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNDYKICAgIC8vIFVJbnQ2NCgpLCBrZXk9Y2ZnLkdTX0tFWV9XRUlHSFRFRF9RVU9SVU1fU01BTEwKICAgIGJ5dGVjIDQzIC8vIDB4Nzc2NTY5Njc2ODc0NjU2NDVmNzE3NTZmNzI3NTZkNWY3MzZkNjE2YzZjCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQ0LTE0NwogICAgLy8gIyBXZWlnaHRlZCBRdW9ydW1zCiAgICAvLyBzZWxmLndlaWdodGVkX3F1b3J1bV9zbWFsbCA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIFVJbnQ2NCgpLCBrZXk9Y2ZnLkdTX0tFWV9XRUlHSFRFRF9RVU9SVU1fU01BTEwKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNDkKICAgIC8vIFVJbnQ2NCgpLCBrZXk9Y2ZnLkdTX0tFWV9XRUlHSFRFRF9RVU9SVU1fTUVESVVNICAjIE5vIGxvbmdlciB1c2VkCiAgICBieXRlYyA0NCAvLyAweDc3NjU2OTY3Njg3NDY1NjQ1ZjcxNzU2ZjcyNzU2ZDVmNmQ2NTY0Njk3NTZkCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQ4LTE1MAogICAgLy8gc2VsZi53ZWlnaHRlZF9xdW9ydW1fbWVkaXVtID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgVUludDY0KCksIGtleT1jZmcuR1NfS0VZX1dFSUdIVEVEX1FVT1JVTV9NRURJVU0gICMgTm8gbG9uZ2VyIHVzZWQKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTIKICAgIC8vIFVJbnQ2NCgpLCBrZXk9Y2ZnLkdTX0tFWV9XRUlHSFRFRF9RVU9SVU1fTEFSR0UKICAgIGJ5dGVjIDQ1IC8vIDB4Nzc2NTY5Njc2ODc0NjU2NDVmNzE3NTZmNzI3NTZkNWY2YzYxNzI2NzY1CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTUxLTE1MwogICAgLy8gc2VsZi53ZWlnaHRlZF9xdW9ydW1fbGFyZ2UgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfV0VJR0hURURfUVVPUlVNX0xBUkdFCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTU3CiAgICAvLyBzZWxmLmNvbW1pdHRlZV9tZW1iZXJzID0gR2xvYmFsU3RhdGUoVUludDY0KCksIGtleT1jZmcuR1NfS0VZX0NPTU1JVFRFRV9NRU1CRVJTKQogICAgYnl0ZWMgNDYgLy8gMHg2MzZmNmQ2ZDY5NzQ3NDY1NjU1ZjZkNjU2ZDYyNjU3MjczCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1OAogICAgLy8gc2VsZi5jb21taXR0ZWVfdm90ZXMgPSBHbG9iYWxTdGF0ZShVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfQ09NTUlUVEVFX1ZPVEVTKQogICAgYnl0ZWMgNDcgLy8gMHg2MzZmNmQ2ZDY5NzQ3NDY1NjU1Zjc2NmY3NDY1NzMKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTYwCiAgICAvLyBVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfTUFYX0NPTU1JVFRFRV9TSVpFCiAgICBieXRlYyA0OCAvLyAweDZkNjE3ODVmNjM2ZjZkNmQ2OTc0NzQ2NTY1NWY3MzY5N2E2NQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1OS0xNjEKICAgIC8vIHNlbGYubWF4X2NvbW1pdHRlZV9zaXplID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgVUludDY0KCksIGtleT1jZmcuR1NfS0VZX01BWF9DT01NSVRURUVfU0laRQogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE2My0xNjQKICAgIC8vICMgQ291bnRlcnMKICAgIC8vIHNlbGYueGdvdnMgPSBHbG9iYWxTdGF0ZShVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfWEdPVlMpCiAgICBieXRlYyAxMSAvLyAweDc4Njc2Zjc2NzMKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTY1CiAgICAvLyBzZWxmLnBlbmRpbmdfcHJvcG9zYWxzID0gR2xvYmFsU3RhdGUoVUludDY0KCksIGtleT1jZmcuR1NfS0VZX1BFTkRJTkdfUFJPUE9TQUxTKQogICAgYnl0ZWMgOCAvLyAweDcwNjU2ZTY0Njk2ZTY3NWY3MDcyNmY3MDZmNzM2MTZjNzMKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTY2CiAgICAvLyBzZWxmLnJlcXVlc3RfaWQgPSBHbG9iYWxTdGF0ZShVSW50NjQoKSwga2V5PWNmZy5HU19LRVlfUkVRVUVTVF9JRCkKICAgIGJ5dGVjIDEyIC8vIDB4NzI2NTcxNzU2NTczNzQ1ZjY5NjQKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo0NS01MwogICAgLy8gY2xhc3MgWEdvdlJlZ2lzdHJ5KAogICAgLy8gICAgIFhHb3ZSZWdpc3RyeUludGVyZmFjZSwKICAgIC8vICAgICBzdGF0ZV90b3RhbHM9U3RhdGVUb3RhbHMoCiAgICAvLyAgICAgICAgIGdsb2JhbF9ieXRlcz1jZmcuR0xPQkFMX0JZVEVTLAogICAgLy8gICAgICAgICBnbG9iYWxfdWludHM9Y2ZnLkdMT0JBTF9VSU5UUywKICAgIC8vICAgICAgICAgbG9jYWxfYnl0ZXM9Y2ZnLkxPQ0FMX0JZVEVTLAogICAgLy8gICAgICAgICBsb2NhbF91aW50cz1jZmcuTE9DQUxfVUlOVFMsCiAgICAvLyAgICAgKSwKICAgIC8vICk6CiAgICBwdXNoYnl0ZXMgMHg0OTU2YzFhYiAvLyBtZXRob2QgInVwZGF0ZV94Z292X3JlZ2lzdHJ5KCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl91cGRhdGVfeGdvdl9yZWdpc3RyeV9yb3V0ZUA0CgptYWluX3N3aXRjaF9jYXNlX25leHRANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ1LTUzCiAgICAvLyBjbGFzcyBYR292UmVnaXN0cnkoCiAgICAvLyAgICAgWEdvdlJlZ2lzdHJ5SW50ZXJmYWNlLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPWNmZy5HTE9CQUxfQllURVMsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz1jZmcuR0xPQkFMX1VJTlRTLAogICAgLy8gICAgICAgICBsb2NhbF9ieXRlcz1jZmcuTE9DQUxfQllURVMsCiAgICAvLyAgICAgICAgIGxvY2FsX3VpbnRzPWNmZy5MT0NBTF9VSU5UUywKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJ6IG1haW5fY3JlYXRlX05vT3BANTMKICAgIHB1c2hieXRlc3MgMHg5NTljNDc2MiAweDZjMWY1NjRkIDB4ZTEwYTUxMmUgMHg4NmY3ZTBlNiAweDM5ZTI2ZDhhIDB4OTgzNTJlODYgMHhmYTRlZDZlMiAweGQ2YzljYzFhIDB4NWM0ODQwNTUgMHgzN2Q2YWRmMSAweGQ0MjE2YjZlIDB4YmE4NTIwZjIgMHgxNjc3YjMwZSAweDg0YjdkMjY4IDB4YWY3ZjE4NjAgMHhhMDgyY2VmOCAweGRmMzlmZGI5IDB4Y2EwZjZhM2EgMHg0NTA3NzM5MCAweDNjMzFiYzAyIDB4MGQyYzc4OTEgMHg5M2ZhY2RiYSAweGNlOGIzYTFjIDB4ZmFlYTA4MWYgMHgwZGEyNzg4NSAweDdhNGZlZTQzIDB4NTJkZDEwZDcgMHhkNGQzN2E2NCAweDM0MzQ5ZGNjIDB4MTU4ZjhkZDYgMHg1ZmUyNTkzNSAweGRiMjdiOWFmIDB4ZjU5MTA3NTYgMHg2NTYxMGE5ZiAweGZkYzY5NWMyIDB4YmE5MGFiNTQgMHgxYTY3NGI0NSAweGE4ZDVhZTk0IDB4NmFlNWViNDYgMHgyNzYzMGQ2NSAweDgyNGY5OGJjIDB4NDk1NDhiYTAgMHg4MjY3ODRmNiAweDI2OTgzMjAwIDB4ZGJkODNkZDkgLy8gbWV0aG9kICJpbml0X3Byb3Bvc2FsX2NvbnRyYWN0KHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJsb2FkX3Byb3Bvc2FsX2NvbnRyYWN0KHVpbnQ2NCxieXRlW10pdm9pZCIsIG1ldGhvZCAiZGVsZXRlX3Byb3Bvc2FsX2NvbnRyYWN0X2JveCgpdm9pZCIsIG1ldGhvZCAicGF1c2VfcmVnaXN0cnkoKXZvaWQiLCBtZXRob2QgInBhdXNlX3Byb3Bvc2Fscygpdm9pZCIsIG1ldGhvZCAicmVzdW1lX3JlZ2lzdHJ5KCl2b2lkIiwgbWV0aG9kICJyZXN1bWVfcHJvcG9zYWxzKCl2b2lkIiwgbWV0aG9kICJzZXRfeGdvdl9tYW5hZ2VyKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAic2V0X3BheW9yKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAic2V0X3hnb3ZfY291bmNpbChhZGRyZXNzKXZvaWQiLCBtZXRob2QgInNldF94Z292X3N1YnNjcmliZXIoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJzZXRfa3ljX3Byb3ZpZGVyKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAic2V0X2NvbW1pdHRlZV9tYW5hZ2VyKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAic2V0X3hnb3ZfZGFlbW9uKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAiY29uZmlnX3hnb3ZfcmVnaXN0cnkoKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NFszXSx1aW50NjRbNF0sdWludDY0WzRdLHVpbnQ2NFszXSx1aW50NjRbM10sdWludDY0LHVpbnQ2NCx1aW50NjQpKXZvaWQiLCBtZXRob2QgInN1YnNjcmliZV94Z292KGFkZHJlc3MscGF5KXZvaWQiLCBtZXRob2QgInVuc3Vic2NyaWJlX3hnb3YoKXZvaWQiLCBtZXRob2QgInVuc3Vic2NyaWJlX2Fic2VudGVlKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAicmVxdWVzdF9zdWJzY3JpYmVfeGdvdihhZGRyZXNzLGFkZHJlc3MsdWludDY0LHBheSl2b2lkIiwgbWV0aG9kICJhcHByb3ZlX3N1YnNjcmliZV94Z292KHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZWplY3Rfc3Vic2NyaWJlX3hnb3YodWludDY0KXZvaWQiLCBtZXRob2QgInJlcXVlc3RfdW5zdWJzY3JpYmVfeGdvdihhZGRyZXNzLGFkZHJlc3MsdWludDY0LHBheSl2b2lkIiwgbWV0aG9kICJhcHByb3ZlX3Vuc3Vic2NyaWJlX3hnb3YodWludDY0KXZvaWQiLCBtZXRob2QgInJlamVjdF91bnN1YnNjcmliZV94Z292KHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzZXRfdm90aW5nX2FjY291bnQoYWRkcmVzcyxhZGRyZXNzKXZvaWQiLCBtZXRob2QgInN1YnNjcmliZV9wcm9wb3NlcihwYXkpdm9pZCIsIG1ldGhvZCAic2V0X3Byb3Bvc2VyX2t5YyhhZGRyZXNzLGJvb2wsdWludDY0KXZvaWQiLCBtZXRob2QgImRlY2xhcmVfY29tbWl0dGVlKGJ5dGVbMzJdLHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAib3Blbl9wcm9wb3NhbChwYXkpdWludDY0IiwgbWV0aG9kICJ2b3RlX3Byb3Bvc2FsKHVpbnQ2NCxhZGRyZXNzLHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAidW5hc3NpZ25fYWJzZW50ZWVfZnJvbV9wcm9wb3NhbCh1aW50NjQsYWRkcmVzc1tdKXZvaWQiLCBtZXRob2QgInBheV9ncmFudF9wcm9wb3NhbCh1aW50NjQpdm9pZCIsIG1ldGhvZCAiZmluYWxpemVfcHJvcG9zYWwodWludDY0KXZvaWQiLCBtZXRob2QgImRyb3BfcHJvcG9zYWwodWludDY0KXZvaWQiLCBtZXRob2QgImRlcG9zaXRfZnVuZHMocGF5KXZvaWQiLCBtZXRob2QgIndpdGhkcmF3X2Z1bmRzKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ3aXRoZHJhd19hdmFpbGFibGVfZnVuZHModWludDY0KXZvaWQiLCBtZXRob2QgImdldF9hdmFpbGFibGVfZnVuZHMoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X3N0YXRlKCkoYm9vbCxib29sLGFkZHJlc3MsYWRkcmVzcyxhZGRyZXNzLGFkZHJlc3MsYWRkcmVzcyxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0WzNdLHVpbnQ2NFs0XSx1aW50NjRbNF0sdWludDY0WzNdLHVpbnQ2NFszXSx1aW50NjQsdWludDY0LGJ5dGVbMzJdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAiZ2V0X3hnb3ZfYm94KGFkZHJlc3MpKChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0KSxib29sKSIsIG1ldGhvZCAiZ2V0X3Byb3Bvc2VyX2JveChhZGRyZXNzKSgoYm9vbCxib29sLHVpbnQ2NCksYm9vbCkiLCBtZXRob2QgImdldF9yZXF1ZXN0X2JveCh1aW50NjQpKChhZGRyZXNzLGFkZHJlc3MsdWludDY0KSxib29sKSIsIG1ldGhvZCAiZ2V0X3JlcXVlc3RfdW5zdWJzY3JpYmVfYm94KHVpbnQ2NCkoKGFkZHJlc3MsYWRkcmVzcyx1aW50NjQpLGJvb2wpIiwgbWV0aG9kICJpc19wcm9wb3NhbCh1aW50NjQpdm9pZCIsIG1ldGhvZCAib3BfdXAoKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBpbml0X3Byb3Bvc2FsX2NvbnRyYWN0IGxvYWRfcHJvcG9zYWxfY29udHJhY3QgZGVsZXRlX3Byb3Bvc2FsX2NvbnRyYWN0X2JveCBwYXVzZV9yZWdpc3RyeSBwYXVzZV9wcm9wb3NhbHMgcmVzdW1lX3JlZ2lzdHJ5IHJlc3VtZV9wcm9wb3NhbHMgc2V0X3hnb3ZfbWFuYWdlciBzZXRfcGF5b3Igc2V0X3hnb3ZfY291bmNpbCBzZXRfeGdvdl9zdWJzY3JpYmVyIHNldF9reWNfcHJvdmlkZXIgc2V0X2NvbW1pdHRlZV9tYW5hZ2VyIHNldF94Z292X2RhZW1vbiBjb25maWdfeGdvdl9yZWdpc3RyeSBzdWJzY3JpYmVfeGdvdiB1bnN1YnNjcmliZV94Z292IHVuc3Vic2NyaWJlX2Fic2VudGVlIHJlcXVlc3Rfc3Vic2NyaWJlX3hnb3YgYXBwcm92ZV9zdWJzY3JpYmVfeGdvdiByZWplY3Rfc3Vic2NyaWJlX3hnb3YgcmVxdWVzdF91bnN1YnNjcmliZV94Z292IGFwcHJvdmVfdW5zdWJzY3JpYmVfeGdvdiByZWplY3RfdW5zdWJzY3JpYmVfeGdvdiBzZXRfdm90aW5nX2FjY291bnQgc3Vic2NyaWJlX3Byb3Bvc2VyIHNldF9wcm9wb3Nlcl9reWMgZGVjbGFyZV9jb21taXR0ZWUgb3Blbl9wcm9wb3NhbCB2b3RlX3Byb3Bvc2FsIHVuYXNzaWduX2Fic2VudGVlX2Zyb21fcHJvcG9zYWwgcGF5X2dyYW50X3Byb3Bvc2FsIGZpbmFsaXplX3Byb3Bvc2FsIGRyb3BfcHJvcG9zYWwgZGVwb3NpdF9mdW5kcyB3aXRoZHJhd19mdW5kcyB3aXRoZHJhd19hdmFpbGFibGVfZnVuZHMgZ2V0X2F2YWlsYWJsZV9mdW5kcyBnZXRfc3RhdGUgZ2V0X3hnb3ZfYm94IGdldF9wcm9wb3Nlcl9ib3ggZ2V0X3JlcXVlc3RfYm94IGdldF9yZXF1ZXN0X3Vuc3Vic2NyaWJlX2JveCBpc19wcm9wb3NhbCBtYWluX29wX3VwX3JvdXRlQDUxCiAgICBlcnIKCm1haW5fb3BfdXBfcm91dGVANTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNzMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jcmVhdGVfTm9PcEA1MzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ1LTUzCiAgICAvLyBjbGFzcyBYR292UmVnaXN0cnkoCiAgICAvLyAgICAgWEdvdlJlZ2lzdHJ5SW50ZXJmYWNlLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPWNmZy5HTE9CQUxfQllURVMsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz1jZmcuR0xPQkFMX1VJTlRTLAogICAgLy8gICAgICAgICBsb2NhbF9ieXRlcz1jZmcuTE9DQUxfQllURVMsCiAgICAvLyAgICAgICAgIGxvY2FsX3VpbnRzPWNmZy5MT0NBTF9VSU5UUywKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHB1c2hieXRlcyAweDRjNWM2MWJhIC8vIG1ldGhvZCAiY3JlYXRlKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY3JlYXRlCiAgICBlcnIKCm1haW5fdXBkYXRlX3hnb3ZfcmVnaXN0cnlfcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjczNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJVcGRhdGVBcHBsaWNhdGlvbiJdKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA0IC8vIFVwZGF0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQKICAgIGIgdXBkYXRlX3hnb3ZfcmVnaXN0cnkKCgovLyBzbWFydF9jb250cmFjdHMueGdvdl9yZWdpc3RyeS5jb250cmFjdC5YR292UmVnaXN0cnkuY3JlYXRlW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NDE3CiAgICAvLyBzZWxmLnhnb3ZfbWFuYWdlci52YWx1ZSA9IFR4bi5zZW5kZXIKICAgIGJ5dGVjIDcgLy8gMHg3ODY3NmY3NjVmNmQ2MTZlNjE2NzY1NzIKICAgIHR4biBTZW5kZXIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyMTIKICAgIC8vIHJldHVybiBUZW1wbGF0ZVZhcltCeXRlc10oImVudHJvcHkiKSAgIyB0cmljayB0byBhbGxvdyBmcmVzaCBkZXBsb3ltZW50CiAgICBieXRlYyA1NiAvLyBUTVBMX2VudHJvcHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQxOAogICAgLy8gYXNzZXJ0IHNlbGYuZW50cm9weSgpID09IFRlbXBsYXRlVmFyW0J5dGVzXSgiZW50cm9weSIpCiAgICBkdXAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQxMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LmluaXRfcHJvcG9zYWxfY29udHJhY3Rbcm91dGluZ10oKSAtPiB2b2lkOgppbml0X3Byb3Bvc2FsX2NvbnRyYWN0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NDIwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NDMyCiAgICAvLyBhc3NlcnQgc2VsZi5pc194Z292X21hbmFnZXIoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgY2FsbHN1YiBpc194Z292X21hbmFnZXIKICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQzNAogICAgLy8gaWYgc2VsZi5wcm9wb3NhbF9hcHByb3ZhbF9wcm9ncmFtOgogICAgYnl0ZWMgNSAvLyAweDcwNjEKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogaW5pdF9wcm9wb3NhbF9jb250cmFjdF9lbHNlX2JvZHlAMwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NDM1CiAgICAvLyBzZWxmLnByb3Bvc2FsX2FwcHJvdmFsX3Byb2dyYW0ucmVzaXplKHNpemUpCiAgICBieXRlYyA1IC8vIDB4NzA2MQogICAgc3dhcAogICAgYm94X3Jlc2l6ZQoKaW5pdF9wcm9wb3NhbF9jb250cmFjdF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo0MjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgppbml0X3Byb3Bvc2FsX2NvbnRyYWN0X2Vsc2VfYm9keUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NDM3LTQzOAogICAgLy8gIyBJbml0aWFsaXplIHRoZSBQcm9wb3NhbCBBcHByb3ZhbCBQcm9ncmFtIGNvbnRyYWN0CiAgICAvLyBfY3JlYXRlZCA9IHNlbGYucHJvcG9zYWxfYXBwcm92YWxfcHJvZ3JhbS5jcmVhdGUoc2l6ZT1zaXplKQogICAgYnl0ZWMgNSAvLyAweDcwNjEKICAgIHN3YXAKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgYiBpbml0X3Byb3Bvc2FsX2NvbnRyYWN0X2FmdGVyX2lmX2Vsc2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy54Z292X3JlZ2lzdHJ5LmNvbnRyYWN0LlhHb3ZSZWdpc3RyeS5sb2FkX3Byb3Bvc2FsX2NvbnRyYWN0W3JvdXRpbmddKCkgLT4gdm9pZDoKbG9hZF9wcm9wb3NhbF9jb250cmFjdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ0MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NDUzCiAgICAvLyBhc3NlcnQgc2VsZi5pc194Z292X21hbmFnZXIoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgY2FsbHN1YiBpc194Z292X21hbmFnZXIKICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ1NS00NTYKICAgIC8vICMgTG9hZCB0aGUgUHJvcG9zYWwgQXBwcm92YWwgUHJvZ3JhbSBjb250cmFjdAogICAgLy8gc2VsZi5wcm9wb3NhbF9hcHByb3ZhbF9wcm9ncmFtLnJlcGxhY2Uoc3RhcnRfaW5kZXg9b2Zmc2V0LCB2YWx1ZT1kYXRhKQogICAgYnl0ZWMgNSAvLyAweDcwNjEKICAgIGNvdmVyIDIKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo0NDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LmRlbGV0ZV9wcm9wb3NhbF9jb250cmFjdF9ib3hbcm91dGluZ10oKSAtPiB2b2lkOgpkZWxldGVfcHJvcG9zYWxfY29udHJhY3RfYm94OgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NDY3CiAgICAvLyBhc3NlcnQgc2VsZi5pc194Z292X21hbmFnZXIoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgY2FsbHN1YiBpc194Z292X21hbmFnZXIKICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ2OS00NzAKICAgIC8vICMgRGVsZXRlIHRoZSBQcm9wb3NhbCBBcHByb3ZhbCBQcm9ncmFtIGNvbnRyYWN0IGJveAogICAgLy8gZGVsIHNlbGYucHJvcG9zYWxfYXBwcm92YWxfcHJvZ3JhbS52YWx1ZQogICAgYnl0ZWMgNSAvLyAweDcwNjEKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NDU4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy54Z292X3JlZ2lzdHJ5LmNvbnRyYWN0LlhHb3ZSZWdpc3RyeS5wYXVzZV9yZWdpc3RyeVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnBhdXNlX3JlZ2lzdHJ5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NDc4CiAgICAvLyBhc3NlcnQgc2VsZi5pc194Z292X21hbmFnZXIoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgY2FsbHN1YiBpc194Z292X21hbmFnZXIKICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ3OQogICAgLy8gc2VsZi5wYXVzZWRfcmVnaXN0cnkudmFsdWUgPSBUcnVlCiAgICBieXRlY18wIC8vIDB4NzA2MTc1NzM2NTY0NWY3MjY1Njc2OTczNzQ3Mjc5CiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ3MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMueGdvdl9yZWdpc3RyeS5jb250cmFjdC5YR292UmVnaXN0cnkucGF1c2VfcHJvcG9zYWxzW3JvdXRpbmddKCkgLT4gdm9pZDoKcGF1c2VfcHJvcG9zYWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NDg3CiAgICAvLyBhc3NlcnQgc2VsZi5pc194Z292X21hbmFnZXIoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgY2FsbHN1YiBpc194Z292X21hbmFnZXIKICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ4OAogICAgLy8gc2VsZi5wYXVzZWRfcHJvcG9zYWxzLnZhbHVlID0gVHJ1ZQogICAgYnl0ZWMgMTAgLy8gMHg3MDYxNzU3MzY1NjQ1ZjcwNzI2ZjcwNmY3MzYxNmM3MwogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo0ODEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LnJlc3VtZV9yZWdpc3RyeVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlc3VtZV9yZWdpc3RyeToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ5NgogICAgLy8gYXNzZXJ0IHNlbGYuaXNfeGdvdl9tYW5hZ2VyKCksIGVyci5VTkFVVEhPUklaRUQKICAgIGNhbGxzdWIgaXNfeGdvdl9tYW5hZ2VyCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo0OTcKICAgIC8vIHNlbGYucGF1c2VkX3JlZ2lzdHJ5LnZhbHVlID0gRmFsc2UKICAgIGJ5dGVjXzAgLy8gMHg3MDYxNzU3MzY1NjQ1ZjcyNjU2NzY5NzM3NDcyNzkKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NDkwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy54Z292X3JlZ2lzdHJ5LmNvbnRyYWN0LlhHb3ZSZWdpc3RyeS5yZXN1bWVfcHJvcG9zYWxzW3JvdXRpbmddKCkgLT4gdm9pZDoKcmVzdW1lX3Byb3Bvc2FsczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjUwNQogICAgLy8gYXNzZXJ0IHNlbGYuaXNfeGdvdl9tYW5hZ2VyKCksIGVyci5VTkFVVEhPUklaRUQKICAgIGNhbGxzdWIgaXNfeGdvdl9tYW5hZ2VyCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo1MDYKICAgIC8vIHNlbGYucGF1c2VkX3Byb3Bvc2Fscy52YWx1ZSA9IEZhbHNlCiAgICBieXRlYyAxMCAvLyAweDcwNjE3NTczNjU2NDVmNzA3MjZmNzA2ZjczNjE2YzczCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ5OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMueGdvdl9yZWdpc3RyeS5jb250cmFjdC5YR292UmVnaXN0cnkuc2V0X3hnb3ZfbWFuYWdlcltyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldF94Z292X21hbmFnZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo1MDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjUyMAogICAgLy8gYXNzZXJ0IHNlbGYuaXNfeGdvdl9tYW5hZ2VyKCksIGVyci5VTkFVVEhPUklaRUQKICAgIGNhbGxzdWIgaXNfeGdvdl9tYW5hZ2VyCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo1MjEKICAgIC8vIHNlbGYueGdvdl9tYW5hZ2VyLnZhbHVlID0gbWFuYWdlcgogICAgYnl0ZWMgNyAvLyAweDc4Njc2Zjc2NWY2ZDYxNmU2MTY3NjU3MgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjUwOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMueGdvdl9yZWdpc3RyeS5jb250cmFjdC5YR292UmVnaXN0cnkuc2V0X3BheW9yW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0X3BheW9yOgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NTIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo1MzUKICAgIC8vIGFzc2VydCBzZWxmLmlzX3hnb3ZfbWFuYWdlcigpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBjYWxsc3ViIGlzX3hnb3ZfbWFuYWdlcgogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NTM2CiAgICAvLyBzZWxmLnhnb3ZfcGF5b3IudmFsdWUgPSBwYXlvcgogICAgYnl0ZWMgOSAvLyAweDc4Njc2Zjc2NWY3MDYxNzk2ZjcyCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NTIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy54Z292X3JlZ2lzdHJ5LmNvbnRyYWN0LlhHb3ZSZWdpc3RyeS5zZXRfeGdvdl9jb3VuY2lsW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0X3hnb3ZfY291bmNpbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjUzOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NTUwCiAgICAvLyBhc3NlcnQgc2VsZi5pc194Z292X21hbmFnZXIoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgY2FsbHN1YiBpc194Z292X21hbmFnZXIKICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU1MQogICAgLy8gc2VsZi54Z292X2NvdW5jaWwudmFsdWUgPSBjb3VuY2lsCiAgICBieXRlYyAyNSAvLyAweDc4Njc2Zjc2NWY2MzZmNzU2ZTYzNjk2YwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjUzOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMueGdvdl9yZWdpc3RyeS5jb250cmFjdC5YR292UmVnaXN0cnkuc2V0X3hnb3Zfc3Vic2NyaWJlcltyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldF94Z292X3N1YnNjcmliZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo1NTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU2NQogICAgLy8gYXNzZXJ0IHNlbGYuaXNfeGdvdl9tYW5hZ2VyKCksIGVyci5VTkFVVEhPUklaRUQKICAgIGNhbGxzdWIgaXNfeGdvdl9tYW5hZ2VyCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo1NjYKICAgIC8vIHNlbGYueGdvdl9zdWJzY3JpYmVyLnZhbHVlID0gc3Vic2NyaWJlcgogICAgYnl0ZWMgMTUgLy8gMHg3ODY3NmY3NjVmNzM3NTYyNzM2MzcyNjk2MjY1NzIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo1NTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LnNldF9reWNfcHJvdmlkZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfa3ljX3Byb3ZpZGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NTY4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo1ODAKICAgIC8vIGFzc2VydCBzZWxmLmlzX3hnb3ZfbWFuYWdlcigpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBjYWxsc3ViIGlzX3hnb3ZfbWFuYWdlcgogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NTgxCiAgICAvLyBzZWxmLmt5Y19wcm92aWRlci52YWx1ZSA9IHByb3ZpZGVyCiAgICBieXRlYyAxNiAvLyAweDZiNzk2MzVmNzA3MjZmNzY2OTY0NjU3MgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU2OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMueGdvdl9yZWdpc3RyeS5jb250cmFjdC5YR292UmVnaXN0cnkuc2V0X2NvbW1pdHRlZV9tYW5hZ2VyW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0X2NvbW1pdHRlZV9tYW5hZ2VyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NTgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo1OTUKICAgIC8vIGFzc2VydCBzZWxmLmlzX3hnb3ZfbWFuYWdlcigpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBjYWxsc3ViIGlzX3hnb3ZfbWFuYWdlcgogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NTk2CiAgICAvLyBzZWxmLmNvbW1pdHRlZV9tYW5hZ2VyLnZhbHVlID0gbWFuYWdlcgogICAgYnl0ZWMgMTcgLy8gMHg2MzZmNmQ2ZDY5NzQ3NDY1NjU1ZjZkNjE2ZTYxNjc2NTcyCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NTgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy54Z292X3JlZ2lzdHJ5LmNvbnRyYWN0LlhHb3ZSZWdpc3RyeS5zZXRfeGdvdl9kYWVtb25bcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfeGdvdl9kYWVtb246CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo1OTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjYxMAogICAgLy8gYXNzZXJ0IHNlbGYuaXNfeGdvdl9tYW5hZ2VyKCksIGVyci5VTkFVVEhPUklaRUQKICAgIGNhbGxzdWIgaXNfeGdvdl9tYW5hZ2VyCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2MTEKICAgIC8vIHNlbGYueGdvdl9kYWVtb24udmFsdWUgPSB4Z292X2RhZW1vbgogICAgYnl0ZWMgMTggLy8gMHg3ODY3NmY3NjVmNjQ2MTY1NmQ2ZjZlCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NTk4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy54Z292X3JlZ2lzdHJ5LmNvbnRyYWN0LlhHb3ZSZWdpc3RyeS5jb25maWdfeGdvdl9yZWdpc3RyeVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNvbmZpZ194Z292X3JlZ2lzdHJ5OgogICAgaW50Y18wIC8vIDAKICAgIHB1c2hieXRlcyAiIgogICAgZHVwbiA1CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2MTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXBuIDIKICAgIGxlbgogICAgcHVzaGludCAyMDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHNtYXJ0X2NvbnRyYWN0cy5jb21tb24uYWJpX3R5cGVzLlhHb3ZSZWdpc3RyeUNvbmZpZwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NjI1CiAgICAvLyBhc3NlcnQgc2VsZi5pc194Z292X21hbmFnZXIoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgY2FsbHN1YiBpc194Z292X21hbmFnZXIKICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY1NAogICAgLy8gY29uZmlnLnhnb3ZfZmVlID49IHhnb3ZfYm94X21iciBhbmQgY29uZmlnLnhnb3ZfZmVlID49IHhnb3ZfcmVxdWVzdF9ib3hfbWJyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MzA0LTMwNgogICAgLy8gcmV0dXJuICgKICAgIC8vICAgICBrZXlfcHJlZml4X2xlbmd0aCArIGtleV90eXBlX3NpemUgKyB2YWx1ZV90eXBlX3NpemUKICAgIC8vICkgKiBQRVJfQllURV9JTl9CT1hfTUJSICsgUEVSX0JPWF9NQlIKICAgIHB1c2hpbnQgMzgxMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY1NAogICAgLy8gY29uZmlnLnhnb3ZfZmVlID49IHhnb3ZfYm94X21iciBhbmQgY29uZmlnLnhnb3ZfZmVlID49IHhnb3ZfcmVxdWVzdF9ib3hfbWJyCiAgICA+PQogICAgYnogY29uZmlnX3hnb3ZfcmVnaXN0cnlfYm9vbF9mYWxzZUA0CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMwNC0zMDYKICAgIC8vIHJldHVybiAoCiAgICAvLyAgICAga2V5X3ByZWZpeF9sZW5ndGggKyBrZXlfdHlwZV9zaXplICsgdmFsdWVfdHlwZV9zaXplCiAgICAvLyApICogUEVSX0JZVEVfSU5fQk9YX01CUiArIFBFUl9CT1hfTUJSCiAgICBwdXNoaW50IDM0OTAwCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2NTQKICAgIC8vIGNvbmZpZy54Z292X2ZlZSA+PSB4Z292X2JveF9tYnIgYW5kIGNvbmZpZy54Z292X2ZlZSA+PSB4Z292X3JlcXVlc3RfYm94X21icgogICAgPj0KICAgIGJ6IGNvbmZpZ194Z292X3JlZ2lzdHJ5X2Jvb2xfZmFsc2VANAogICAgaW50Y18xIC8vIDEKCmNvbmZpZ194Z292X3JlZ2lzdHJ5X2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY1My02NTUKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgY29uZmlnLnhnb3ZfZmVlID49IHhnb3ZfYm94X21iciBhbmQgY29uZmlnLnhnb3ZfZmVlID49IHhnb3ZfcmVxdWVzdF9ib3hfbWJyCiAgICAvLyApLCBlcnIuSU5WQUxJRF9YR09WX0ZFRQogICAgYXNzZXJ0IC8vIEludmFsaWQgeEdvdiBmZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY1NwogICAgLy8gYXNzZXJ0IGNvbmZpZy5wcm9wb3Nlcl9mZWUgPj0gcHJvcG9zZXJfYm94X21iciwgZXJyLklOVkFMSURfUFJPUE9TRVJfRkVFCiAgICBkaWcgMQogICAgZHVwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgY292ZXIgNAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MzA0LTMwNgogICAgLy8gcmV0dXJuICgKICAgIC8vICAgICBrZXlfcHJlZml4X2xlbmd0aCArIGtleV90eXBlX3NpemUgKyB2YWx1ZV90eXBlX3NpemUKICAgIC8vICkgKiBQRVJfQllURV9JTl9CT1hfTUJSICsgUEVSX0JPWF9NQlIKICAgIHB1c2hpbnQgMTkzMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY1NwogICAgLy8gYXNzZXJ0IGNvbmZpZy5wcm9wb3Nlcl9mZWUgPj0gcHJvcG9zZXJfYm94X21iciwgZXJyLklOVkFMSURfUFJPUE9TRVJfRkVFCiAgICA+PQogICAgYXNzZXJ0IC8vIEludmFsaWQgcHJvcG9zZXIgZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2NjEKICAgIC8vIDwgY29uZmlnLm1pbl9yZXF1ZXN0ZWRfYW1vdW50CiAgICBwdXNoaW50IDQwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBjb3ZlciA0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2NjAtNjYyCiAgICAvLyAwCiAgICAvLyA8IGNvbmZpZy5taW5fcmVxdWVzdGVkX2Ftb3VudAogICAgLy8gPCBjb25maWcubWF4X3JlcXVlc3RlZF9hbW91bnRbMF0KICAgIGJ6IGNvbmZpZ194Z292X3JlZ2lzdHJ5X2Jvb2xfZmFsc2VAMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY2MgogICAgLy8gPCBjb25maWcubWF4X3JlcXVlc3RlZF9hbW91bnRbMF0KICAgIGRpZyAxCiAgICBleHRyYWN0IDQ4IDI0CiAgICBkdXAKICAgIGJ1cnkgMTIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBidXJ5IDExCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2NjEtNjYyCiAgICAvLyA8IGNvbmZpZy5taW5fcmVxdWVzdGVkX2Ftb3VudAogICAgLy8gPCBjb25maWcubWF4X3JlcXVlc3RlZF9hbW91bnRbMF0KICAgIGRpZyA0CiAgICA+CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2NjAtNjYyCiAgICAvLyAwCiAgICAvLyA8IGNvbmZpZy5taW5fcmVxdWVzdGVkX2Ftb3VudAogICAgLy8gPCBjb25maWcubWF4X3JlcXVlc3RlZF9hbW91bnRbMF0KICAgIGJ6IGNvbmZpZ194Z292X3JlZ2lzdHJ5X2Jvb2xfZmFsc2VAMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY2MwogICAgLy8gPCBjb25maWcubWF4X3JlcXVlc3RlZF9hbW91bnRbMV0KICAgIGRpZyAxMAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NjYyLTY2MwogICAgLy8gPCBjb25maWcubWF4X3JlcXVlc3RlZF9hbW91bnRbMF0KICAgIC8vIDwgY29uZmlnLm1heF9yZXF1ZXN0ZWRfYW1vdW50WzFdCiAgICBpbnRjXzMgLy8gOAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NjYzCiAgICAvLyA8IGNvbmZpZy5tYXhfcmVxdWVzdGVkX2Ftb3VudFsxXQogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgYnVyeSAxMAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NjYyLTY2MwogICAgLy8gPCBjb25maWcubWF4X3JlcXVlc3RlZF9hbW91bnRbMF0KICAgIC8vIDwgY29uZmlnLm1heF9yZXF1ZXN0ZWRfYW1vdW50WzFdCiAgICBkaWcgMTAKICAgID4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY2MS02NjMKICAgIC8vIDwgY29uZmlnLm1pbl9yZXF1ZXN0ZWRfYW1vdW50CiAgICAvLyA8IGNvbmZpZy5tYXhfcmVxdWVzdGVkX2Ftb3VudFswXQogICAgLy8gPCBjb25maWcubWF4X3JlcXVlc3RlZF9hbW91bnRbMV0KICAgIGJ6IGNvbmZpZ194Z292X3JlZ2lzdHJ5X2Jvb2xfZmFsc2VAMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY2NAogICAgLy8gPCBjb25maWcubWF4X3JlcXVlc3RlZF9hbW91bnRbMl0KICAgIGRpZyAxMAogICAgcHVzaGludCAxNgogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY2My02NjQKICAgIC8vIDwgY29uZmlnLm1heF9yZXF1ZXN0ZWRfYW1vdW50WzFdCiAgICAvLyA8IGNvbmZpZy5tYXhfcmVxdWVzdGVkX2Ftb3VudFsyXQogICAgZGlnIDkKICAgID4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY2Mi02NjQKICAgIC8vIDwgY29uZmlnLm1heF9yZXF1ZXN0ZWRfYW1vdW50WzBdCiAgICAvLyA8IGNvbmZpZy5tYXhfcmVxdWVzdGVkX2Ftb3VudFsxXQogICAgLy8gPCBjb25maWcubWF4X3JlcXVlc3RlZF9hbW91bnRbMl0KICAgIGJ6IGNvbmZpZ194Z292X3JlZ2lzdHJ5X2Jvb2xfZmFsc2VAMTAKICAgIGludGNfMSAvLyAxCgpjb25maWdfeGdvdl9yZWdpc3RyeV9ib29sX21lcmdlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NjU5LTY2NQogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICAwCiAgICAvLyAgICAgPCBjb25maWcubWluX3JlcXVlc3RlZF9hbW91bnQKICAgIC8vICAgICA8IGNvbmZpZy5tYXhfcmVxdWVzdGVkX2Ftb3VudFswXQogICAgLy8gICAgIDwgY29uZmlnLm1heF9yZXF1ZXN0ZWRfYW1vdW50WzFdCiAgICAvLyAgICAgPCBjb25maWcubWF4X3JlcXVlc3RlZF9hbW91bnRbMl0KICAgIC8vICksIGVyci5JTkNPTlNJU1RFTlRfUkVRVUVTVEVEX0FNT1VOVF9DT05GSUcKICAgIGFzc2VydCAvLyBJbmNvbnNpc3RlbnQgcmVxdWVzdGVkIGFtb3VudCBjb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY2OAogICAgLy8gY29uZmlnLm9wZW5fcHJvcG9zYWxfZmVlLAogICAgZGlnIDEKICAgIGR1cAogICAgcHVzaGludCAxNgogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgY292ZXIgMgogICAgY292ZXIgNgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NjY5CiAgICAvLyBjb25maWcuZGFlbW9uX29wc19mdW5kaW5nX2JwcywKICAgIGR1cAogICAgcHVzaGludCAyNAogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgY292ZXIgNwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6Mjg4CiAgICAvLyByZXR1cm4gYW1vdW50ICogZnJhY3Rpb25faW5fYnBzIC8vIEJQUwogICAgZGlnIDIKICAgICoKICAgIHB1c2hpbnQgMTAwMDAKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMzMgogICAgLy8gVUludDY0KE1BWF9NQlJfUEVSX0FQUCArIE1BWF9NQlJfUEVSX0JPWCArIEFDQ09VTlRfTUJSKSArIGRhZW1vbl9vcHNfZnVuZGluZwogICAgcHVzaGludCAxNjgzNTMwMAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MzM1CiAgICAvLyBhc3NlcnQgb3Blbl9wcm9wb3NhbF9mZWUgPiB0b19zdWJzdHJhY3QsIGVyci5JTlZBTElEX09QRU5fUFJPUE9TQUxfRkVFCiAgICBkaWcgMgogICAgZGlnIDEKICAgID4KICAgIGFzc2VydCAvLyBJbnZhbGlkIG9wZW4gcHJvcG9zYWwgZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTozMzcKICAgIC8vIG1icl9hdmFpbGFibGVfZm9yX2NvbW1pdHRlZSA9IG9wZW5fcHJvcG9zYWxfZmVlIC0gdG9fc3Vic3RyYWN0CiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMwNC0zMDYKICAgIC8vIHJldHVybiAoCiAgICAvLyAgICAga2V5X3ByZWZpeF9sZW5ndGggKyBrZXlfdHlwZV9zaXplICsgdmFsdWVfdHlwZV9zaXplCiAgICAvLyApICogUEVSX0JZVEVfSU5fQk9YX01CUiArIFBFUl9CT1hfTUJSCiAgICBwdXNoaW50IDE4OTAwCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTozMzkKICAgIC8vIHNlbGYubWF4X2NvbW1pdHRlZV9zaXplLnZhbHVlID0gbWJyX2F2YWlsYWJsZV9mb3JfY29tbWl0dGVlIC8vIHZvdGVyX21icgogICAgLwogICAgYnl0ZWMgNDggLy8gMHg2ZDYxNzg1ZjYzNmY2ZDZkNjk3NDc0NjU2NTVmNzM2OTdhNjUKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2NzUKICAgIC8vIDwgY29uZmlnLmRpc2N1c3Npb25fZHVyYXRpb25bMF0KICAgIGV4dHJhY3QgNzIgMzIKICAgIGR1cAogICAgY292ZXIgNAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIGNvdmVyIDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY3NC02NzYKICAgIC8vIDAKICAgIC8vIDwgY29uZmlnLmRpc2N1c3Npb25fZHVyYXRpb25bMF0KICAgIC8vIDw9IGNvbmZpZy5kaXNjdXNzaW9uX2R1cmF0aW9uWzFdCiAgICBieiBjb25maWdfeGdvdl9yZWdpc3RyeV9ib29sX2ZhbHNlQDE2CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2NzYKICAgIC8vIDw9IGNvbmZpZy5kaXNjdXNzaW9uX2R1cmF0aW9uWzFdCiAgICBkaWcgMwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6Njc1LTY3NgogICAgLy8gPCBjb25maWcuZGlzY3Vzc2lvbl9kdXJhdGlvblswXQogICAgLy8gPD0gY29uZmlnLmRpc2N1c3Npb25fZHVyYXRpb25bMV0KICAgIGludGNfMyAvLyA4CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2NzYKICAgIC8vIDw9IGNvbmZpZy5kaXNjdXNzaW9uX2R1cmF0aW9uWzFdCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBidXJ5IDEzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2NzUtNjc2CiAgICAvLyA8IGNvbmZpZy5kaXNjdXNzaW9uX2R1cmF0aW9uWzBdCiAgICAvLyA8PSBjb25maWcuZGlzY3Vzc2lvbl9kdXJhdGlvblsxXQogICAgZGlnIDYKICAgID49CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2NzQtNjc2CiAgICAvLyAwCiAgICAvLyA8IGNvbmZpZy5kaXNjdXNzaW9uX2R1cmF0aW9uWzBdCiAgICAvLyA8PSBjb25maWcuZGlzY3Vzc2lvbl9kdXJhdGlvblsxXQogICAgYnogY29uZmlnX3hnb3ZfcmVnaXN0cnlfYm9vbF9mYWxzZUAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6Njc3CiAgICAvLyA8PSBjb25maWcuZGlzY3Vzc2lvbl9kdXJhdGlvblsyXQogICAgZGlnIDMKICAgIHB1c2hpbnQgMTYKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIGJ1cnkgMTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY3Ni02NzcKICAgIC8vIDw9IGNvbmZpZy5kaXNjdXNzaW9uX2R1cmF0aW9uWzFdCiAgICAvLyA8PSBjb25maWcuZGlzY3Vzc2lvbl9kdXJhdGlvblsyXQogICAgZGlnIDEyCiAgICA+PQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6Njc1LTY3NwogICAgLy8gPCBjb25maWcuZGlzY3Vzc2lvbl9kdXJhdGlvblswXQogICAgLy8gPD0gY29uZmlnLmRpc2N1c3Npb25fZHVyYXRpb25bMV0KICAgIC8vIDw9IGNvbmZpZy5kaXNjdXNzaW9uX2R1cmF0aW9uWzJdCiAgICBieiBjb25maWdfeGdvdl9yZWdpc3RyeV9ib29sX2ZhbHNlQDE2CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2NzgKICAgIC8vIDw9IGNvbmZpZy5kaXNjdXNzaW9uX2R1cmF0aW9uWzNdCiAgICBkaWcgMwogICAgcHVzaGludCAyNAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY3Ny02NzgKICAgIC8vIDw9IGNvbmZpZy5kaXNjdXNzaW9uX2R1cmF0aW9uWzJdCiAgICAvLyA8PSBjb25maWcuZGlzY3Vzc2lvbl9kdXJhdGlvblszXQogICAgZGlnIDExCiAgICA+PQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6Njc2LTY3OAogICAgLy8gPD0gY29uZmlnLmRpc2N1c3Npb25fZHVyYXRpb25bMV0KICAgIC8vIDw9IGNvbmZpZy5kaXNjdXNzaW9uX2R1cmF0aW9uWzJdCiAgICAvLyA8PSBjb25maWcuZGlzY3Vzc2lvbl9kdXJhdGlvblszXQogICAgYnogY29uZmlnX3hnb3ZfcmVnaXN0cnlfYm9vbF9mYWxzZUAxNgogICAgaW50Y18xIC8vIDEKCmNvbmZpZ194Z292X3JlZ2lzdHJ5X2Jvb2xfbWVyZ2VAMTc6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2NzMtNjc5CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIDAKICAgIC8vICAgICA8IGNvbmZpZy5kaXNjdXNzaW9uX2R1cmF0aW9uWzBdCiAgICAvLyAgICAgPD0gY29uZmlnLmRpc2N1c3Npb25fZHVyYXRpb25bMV0KICAgIC8vICAgICA8PSBjb25maWcuZGlzY3Vzc2lvbl9kdXJhdGlvblsyXQogICAgLy8gICAgIDw9IGNvbmZpZy5kaXNjdXNzaW9uX2R1cmF0aW9uWzNdCiAgICAvLyApLCBlcnIuSU5DT05TSVNURU5UX0RJU0NVU1NJT05fRFVSQVRJT05fQ09ORklHCiAgICBhc3NlcnQgLy8gSW5jb25zaXN0ZW50IGRpc2N1c3Npb24gZHVyYXRpb24gY29uZmlnCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2ODMKICAgIC8vIDwgY29uZmlnLnZvdGluZ19kdXJhdGlvblswXQogICAgZGlnIDEKICAgIGV4dHJhY3QgMTA0IDMyCiAgICBkdXAKICAgIGNvdmVyIDUKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBjb3ZlciAxMAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NjgyLTY4NAogICAgLy8gMAogICAgLy8gPCBjb25maWcudm90aW5nX2R1cmF0aW9uWzBdCiAgICAvLyA8PSBjb25maWcudm90aW5nX2R1cmF0aW9uWzFdCiAgICBieiBjb25maWdfeGdvdl9yZWdpc3RyeV9ib29sX2ZhbHNlQDIyCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2ODQKICAgIC8vIDw9IGNvbmZpZy52b3RpbmdfZHVyYXRpb25bMV0KICAgIGRpZyA0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2ODMtNjg0CiAgICAvLyA8IGNvbmZpZy52b3RpbmdfZHVyYXRpb25bMF0KICAgIC8vIDw9IGNvbmZpZy52b3RpbmdfZHVyYXRpb25bMV0KICAgIGludGNfMyAvLyA4CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2ODQKICAgIC8vIDw9IGNvbmZpZy52b3RpbmdfZHVyYXRpb25bMV0KICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIGJ1cnkgMTMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY4My02ODQKICAgIC8vIDwgY29uZmlnLnZvdGluZ19kdXJhdGlvblswXQogICAgLy8gPD0gY29uZmlnLnZvdGluZ19kdXJhdGlvblsxXQogICAgZGlnIDEwCiAgICA+PQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NjgyLTY4NAogICAgLy8gMAogICAgLy8gPCBjb25maWcudm90aW5nX2R1cmF0aW9uWzBdCiAgICAvLyA8PSBjb25maWcudm90aW5nX2R1cmF0aW9uWzFdCiAgICBieiBjb25maWdfeGdvdl9yZWdpc3RyeV9ib29sX2ZhbHNlQDIyCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2ODUKICAgIC8vIDw9IGNvbmZpZy52b3RpbmdfZHVyYXRpb25bMl0KICAgIGRpZyA0CiAgICBwdXNoaW50IDE2CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBidXJ5IDEyCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2ODQtNjg1CiAgICAvLyA8PSBjb25maWcudm90aW5nX2R1cmF0aW9uWzFdCiAgICAvLyA8PSBjb25maWcudm90aW5nX2R1cmF0aW9uWzJdCiAgICBkaWcgMTIKICAgID49CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2ODMtNjg1CiAgICAvLyA8IGNvbmZpZy52b3RpbmdfZHVyYXRpb25bMF0KICAgIC8vIDw9IGNvbmZpZy52b3RpbmdfZHVyYXRpb25bMV0KICAgIC8vIDw9IGNvbmZpZy52b3RpbmdfZHVyYXRpb25bMl0KICAgIGJ6IGNvbmZpZ194Z292X3JlZ2lzdHJ5X2Jvb2xfZmFsc2VAMjIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY4NgogICAgLy8gPD0gY29uZmlnLnZvdGluZ19kdXJhdGlvblszXQogICAgZGlnIDQKICAgIHB1c2hpbnQgMjQKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2ODUtNjg2CiAgICAvLyA8PSBjb25maWcudm90aW5nX2R1cmF0aW9uWzJdCiAgICAvLyA8PSBjb25maWcudm90aW5nX2R1cmF0aW9uWzNdCiAgICBkaWcgMTEKICAgID49CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2ODQtNjg2CiAgICAvLyA8PSBjb25maWcudm90aW5nX2R1cmF0aW9uWzFdCiAgICAvLyA8PSBjb25maWcudm90aW5nX2R1cmF0aW9uWzJdCiAgICAvLyA8PSBjb25maWcudm90aW5nX2R1cmF0aW9uWzNdCiAgICBieiBjb25maWdfeGdvdl9yZWdpc3RyeV9ib29sX2ZhbHNlQDIyCiAgICBpbnRjXzEgLy8gMQoKY29uZmlnX3hnb3ZfcmVnaXN0cnlfYm9vbF9tZXJnZUAyMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY4MS02ODcKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgMAogICAgLy8gICAgIDwgY29uZmlnLnZvdGluZ19kdXJhdGlvblswXQogICAgLy8gICAgIDw9IGNvbmZpZy52b3RpbmdfZHVyYXRpb25bMV0KICAgIC8vICAgICA8PSBjb25maWcudm90aW5nX2R1cmF0aW9uWzJdCiAgICAvLyAgICAgPD0gY29uZmlnLnZvdGluZ19kdXJhdGlvblszXQogICAgLy8gKSwgZXJyLklOQ09OU0lTVEVOVF9WT1RJTkdfRFVSQVRJT05fQ09ORklHCiAgICBhc3NlcnQgLy8gSW5jb25zaXN0ZW50IHZvdGluZyBkdXJhdGlvbiBjb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY5MQogICAgLy8gPCBjb25maWcucXVvcnVtWzBdCiAgICBkaWcgMQogICAgZXh0cmFjdCAxMzYgMjQKICAgIGR1cAogICAgY292ZXIgMTEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBjb3ZlciAxMQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NjkwLTY5MQogICAgLy8gMAogICAgLy8gPCBjb25maWcucXVvcnVtWzBdCiAgICBieiBjb25maWdfeGdvdl9yZWdpc3RyeV9ib29sX2ZhbHNlQDI2CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2OTItNjkzCiAgICAvLyAjIFF1b3J1bSBNZWRpdW0gbm8gbG9uZ2VyIHVzZWQKICAgIC8vIDwgY29uZmlnLnF1b3J1bVsyXQogICAgZGlnIDExCiAgICBwdXNoaW50IDE2CiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NjkxCiAgICAvLyA8IGNvbmZpZy5xdW9ydW1bMF0KICAgIGRpZyAxMQogICAgPgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NjkwLTY5MQogICAgLy8gMAogICAgLy8gPCBjb25maWcucXVvcnVtWzBdCiAgICBieiBjb25maWdfeGdvdl9yZWdpc3RyeV9ib29sX2ZhbHNlQDI2CiAgICBpbnRjXzEgLy8gMQoKY29uZmlnX3hnb3ZfcmVnaXN0cnlfYm9vbF9tZXJnZUAyNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY4OS02OTQKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgMAogICAgLy8gICAgIDwgY29uZmlnLnF1b3J1bVswXQogICAgLy8gICAgICMgUXVvcnVtIE1lZGl1bSBubyBsb25nZXIgdXNlZAogICAgLy8gICAgIDwgY29uZmlnLnF1b3J1bVsyXQogICAgLy8gKSwgZXJyLklOQ09OU0lTVEVOVF9RVU9SVU1fQ09ORklHCiAgICBhc3NlcnQgLy8gSW5jb25zaXN0ZW50IHF1b3J1bSBjb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY5OAogICAgLy8gPCBjb25maWcud2VpZ2h0ZWRfcXVvcnVtWzBdCiAgICBkaWcgMQogICAgZXh0cmFjdCAxNjAgMjQKICAgIGR1cAogICAgY292ZXIgMTMKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBjb3ZlciAxMwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6Njk3LTY5OAogICAgLy8gMAogICAgLy8gPCBjb25maWcud2VpZ2h0ZWRfcXVvcnVtWzBdCiAgICBieiBjb25maWdfeGdvdl9yZWdpc3RyeV9ib29sX2ZhbHNlQDMwCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2OTktNzAwCiAgICAvLyAjIFdlaWdodGVkIFF1b3J1bSBNZWRpdW0gbm8gbG9uZ2VyIHVzZWQKICAgIC8vIDwgY29uZmlnLndlaWdodGVkX3F1b3J1bVsyXQogICAgZGlnIDEzCiAgICBwdXNoaW50IDE2CiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6Njk4CiAgICAvLyA8IGNvbmZpZy53ZWlnaHRlZF9xdW9ydW1bMF0KICAgIGRpZyAxMwogICAgPgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6Njk3LTY5OAogICAgLy8gMAogICAgLy8gPCBjb25maWcud2VpZ2h0ZWRfcXVvcnVtWzBdCiAgICBieiBjb25maWdfeGdvdl9yZWdpc3RyeV9ib29sX2ZhbHNlQDMwCiAgICBpbnRjXzEgLy8gMQoKY29uZmlnX3hnb3ZfcmVnaXN0cnlfYm9vbF9tZXJnZUAzMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY5Ni03MDEKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgMAogICAgLy8gICAgIDwgY29uZmlnLndlaWdodGVkX3F1b3J1bVswXQogICAgLy8gICAgICMgV2VpZ2h0ZWQgUXVvcnVtIE1lZGl1bSBubyBsb25nZXIgdXNlZAogICAgLy8gICAgIDwgY29uZmlnLndlaWdodGVkX3F1b3J1bVsyXQogICAgLy8gKSwgZXJyLklOQ09OU0lTVEVOVF9XRUlHSFRFRF9RVU9SVU1fQ09ORklHCiAgICBhc3NlcnQgLy8gSW5jb25zaXN0ZW50IHdlaWdodGVkIHF1b3J1bSBjb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcwMwogICAgLy8gc2VsZi54Z292X2ZlZS52YWx1ZSA9IGNvbmZpZy54Z292X2ZlZQogICAgYnl0ZWMgMTkgLy8gMHg3ODY3NmY3NjVmNjY2NTY1CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NzA0CiAgICAvLyBzZWxmLnByb3Bvc2VyX2ZlZS52YWx1ZSA9IGNvbmZpZy5wcm9wb3Nlcl9mZWUKICAgIGJ5dGVjIDIwIC8vIDB4NzA3MjZmNzA2ZjczNjU3MjVmNjY2NTY1CiAgICB1bmNvdmVyIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3MDUKICAgIC8vIHNlbGYub3Blbl9wcm9wb3NhbF9mZWUudmFsdWUgPSBjb25maWcub3Blbl9wcm9wb3NhbF9mZWUKICAgIGJ5dGVjIDIxIC8vIDB4NmY3MDY1NmU1ZjcwNzI2ZjcwNmY3MzYxNmM1ZjY2NjU2NQogICAgdW5jb3ZlciA3CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NzA2CiAgICAvLyBzZWxmLmRhZW1vbl9vcHNfZnVuZGluZ19icHMudmFsdWUgPSBjb25maWcuZGFlbW9uX29wc19mdW5kaW5nX2JwcwogICAgYnl0ZWMgMjYgLy8gMHg2NDYxNjU2ZDZmNmU1ZjZmNzA2NTcyNjE3NDY5NmY2ZTVmNjY3NTZlNjQ2OTZlNjc1ZjYyNzA3MwogICAgdW5jb3ZlciA2CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NzA3CiAgICAvLyBzZWxmLnByb3Bvc2FsX2NvbW1pdG1lbnRfYnBzLnZhbHVlID0gY29uZmlnLnByb3Bvc2FsX2NvbW1pdG1lbnRfYnBzCiAgICBkdXAKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdF91aW50NjQKICAgIGJ5dGVjIDI3IC8vIDB4NzA3MjZmNzA2ZjczNjE2YzVmNjM2ZjZkNmQ2OTc0NmQ2NTZlNzQ1ZjYyNzA3MwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcwOQogICAgLy8gc2VsZi5taW5fcmVxdWVzdGVkX2Ftb3VudC52YWx1ZSA9IGNvbmZpZy5taW5fcmVxdWVzdGVkX2Ftb3VudAogICAgYnl0ZWMgMjggLy8gMHg2ZDY5NmU1ZjcyNjU3MTc1NjU3Mzc0NjU2NDVmNjE2ZDZmNzU2ZTc0CiAgICB1bmNvdmVyIDQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3MTAKICAgIC8vIHNlbGYubWF4X3JlcXVlc3RlZF9hbW91bnRfc21hbGwudmFsdWUgPSBjb25maWcubWF4X3JlcXVlc3RlZF9hbW91bnRbMF0KICAgIGR1cAogICAgZXh0cmFjdCA0OCAyNAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGJ5dGVjIDI5IC8vIDB4NmQ2MTc4NWY3MjY1NzE3NTY1NzM3NDY1NjQ1ZjYxNmQ2Zjc1NmU3NDVmNzM2ZDYxNmM2YwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcxMQogICAgLy8gc2VsZi5tYXhfcmVxdWVzdGVkX2Ftb3VudF9tZWRpdW0udmFsdWUgPSBjb25maWcubWF4X3JlcXVlc3RlZF9hbW91bnRbMV0KICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NzEwLTcxMQogICAgLy8gc2VsZi5tYXhfcmVxdWVzdGVkX2Ftb3VudF9zbWFsbC52YWx1ZSA9IGNvbmZpZy5tYXhfcmVxdWVzdGVkX2Ftb3VudFswXQogICAgLy8gc2VsZi5tYXhfcmVxdWVzdGVkX2Ftb3VudF9tZWRpdW0udmFsdWUgPSBjb25maWcubWF4X3JlcXVlc3RlZF9hbW91bnRbMV0KICAgIGludGNfMyAvLyA4CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3MTEKICAgIC8vIHNlbGYubWF4X3JlcXVlc3RlZF9hbW91bnRfbWVkaXVtLnZhbHVlID0gY29uZmlnLm1heF9yZXF1ZXN0ZWRfYW1vdW50WzFdCiAgICBleHRyYWN0X3VpbnQ2NAogICAgYnl0ZWMgMzAgLy8gMHg2ZDYxNzg1ZjcyNjU3MTc1NjU3Mzc0NjU2NDVmNjE2ZDZmNzU2ZTc0NWY2ZDY1NjQ2OTc1NmQKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3MTIKICAgIC8vIHNlbGYubWF4X3JlcXVlc3RlZF9hbW91bnRfbGFyZ2UudmFsdWUgPSBjb25maWcubWF4X3JlcXVlc3RlZF9hbW91bnRbMl0KICAgIHB1c2hpbnQgMTYKICAgIGV4dHJhY3RfdWludDY0CiAgICBieXRlYyAzMSAvLyAweDZkNjE3ODVmNzI2NTcxNzU2NTczNzQ2NTY0NWY2MTZkNmY3NTZlNzQ1ZjZjNjE3MjY3NjUKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3MTQKICAgIC8vIHNlbGYuZGlzY3Vzc2lvbl9kdXJhdGlvbl9zbWFsbC52YWx1ZSA9IGNvbmZpZy5kaXNjdXNzaW9uX2R1cmF0aW9uWzBdCiAgICBieXRlYyAzMiAvLyAweDY0Njk3MzYzNzU3MzczNjk2ZjZlNWY2NDc1NzI2MTc0Njk2ZjZlNWY3MzZkNjE2YzZjCiAgICB1bmNvdmVyIDQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3MTUKICAgIC8vIHNlbGYuZGlzY3Vzc2lvbl9kdXJhdGlvbl9tZWRpdW0udmFsdWUgPSBjb25maWcuZGlzY3Vzc2lvbl9kdXJhdGlvblsxXQogICAgc3dhcAogICAgZHVwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGJ5dGVjIDMzIC8vIDB4NjQ2OTczNjM3NTczNzM2OTZmNmU1ZjY0NzU3MjYxNzQ2OTZmNmU1ZjZkNjU2NDY5NzU2ZAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcxNgogICAgLy8gc2VsZi5kaXNjdXNzaW9uX2R1cmF0aW9uX2xhcmdlLnZhbHVlID0gY29uZmlnLmRpc2N1c3Npb25fZHVyYXRpb25bMl0KICAgIGR1cAogICAgcHVzaGludCAxNgogICAgZXh0cmFjdF91aW50NjQKICAgIGJ5dGVjIDM0IC8vIDB4NjQ2OTczNjM3NTczNzM2OTZmNmU1ZjY0NzU3MjYxNzQ2OTZmNmU1ZjZjNjE3MjY3NjUKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3MTcKICAgIC8vIHNlbGYuZGlzY3Vzc2lvbl9kdXJhdGlvbl94bGFyZ2UudmFsdWUgPSBjb25maWcuZGlzY3Vzc2lvbl9kdXJhdGlvblszXQogICAgcHVzaGludCAyNAogICAgZXh0cmFjdF91aW50NjQKICAgIGJ5dGVjIDM1IC8vIDB4NjQ2OTczNjM3NTczNzM2OTZmNmU1ZjY0NzU3MjYxNzQ2OTZmNmU1Zjc4NmM2MTcyNjc2NQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcxOQogICAgLy8gc2VsZi52b3RpbmdfZHVyYXRpb25fc21hbGwudmFsdWUgPSBjb25maWcudm90aW5nX2R1cmF0aW9uWzBdCiAgICBieXRlYyAzNiAvLyAweDc2NmY3NDY5NmU2NzVmNjQ3NTcyNjE3NDY5NmY2ZTVmNzM2ZDYxNmM2YwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NzIwCiAgICAvLyBzZWxmLnZvdGluZ19kdXJhdGlvbl9tZWRpdW0udmFsdWUgPSBjb25maWcudm90aW5nX2R1cmF0aW9uWzFdCiAgICBzd2FwCiAgICBkdXAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgYnl0ZWMgMzcgLy8gMHg3NjZmNzQ2OTZlNjc1ZjY0NzU3MjYxNzQ2OTZmNmU1ZjZkNjU2NDY5NzU2ZAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcyMQogICAgLy8gc2VsZi52b3RpbmdfZHVyYXRpb25fbGFyZ2UudmFsdWUgPSBjb25maWcudm90aW5nX2R1cmF0aW9uWzJdCiAgICBkdXAKICAgIHB1c2hpbnQgMTYKICAgIGV4dHJhY3RfdWludDY0CiAgICBieXRlYyAzOCAvLyAweDc2NmY3NDY5NmU2NzVmNjQ3NTcyNjE3NDY5NmY2ZTVmNmM2MTcyNjc2NQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcyMgogICAgLy8gc2VsZi52b3RpbmdfZHVyYXRpb25feGxhcmdlLnZhbHVlID0gY29uZmlnLnZvdGluZ19kdXJhdGlvblszXQogICAgcHVzaGludCAyNAogICAgZXh0cmFjdF91aW50NjQKICAgIGJ5dGVjIDM5IC8vIDB4NzY2Zjc0Njk2ZTY3NWY2NDc1NzI2MTc0Njk2ZjZlNWY3ODZjNjE3MjY3NjUKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3MjQKICAgIC8vIHNlbGYucXVvcnVtX3NtYWxsLnZhbHVlID0gY29uZmlnLnF1b3J1bVswXQogICAgYnl0ZWMgNDAgLy8gMHg3MTc1NmY3Mjc1NmQ1ZjczNmQ2MTZjNmMKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcyNQogICAgLy8gc2VsZi5xdW9ydW1fbWVkaXVtLnZhbHVlID0gVUludDY0KDApICAjIE5vIGxvbmdlciB1c2VkCiAgICBieXRlYyA0MSAvLyAweDcxNzU2ZjcyNzU2ZDVmNmQ2NTY0Njk3NTZkCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcyNgogICAgLy8gc2VsZi5xdW9ydW1fbGFyZ2UudmFsdWUgPSBjb25maWcucXVvcnVtWzJdCiAgICBzd2FwCiAgICBwdXNoaW50IDE2CiAgICBleHRyYWN0X3VpbnQ2NAogICAgYnl0ZWMgNDIgLy8gMHg3MTc1NmY3Mjc1NmQ1ZjZjNjE3MjY3NjUKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3MjgKICAgIC8vIHNlbGYud2VpZ2h0ZWRfcXVvcnVtX3NtYWxsLnZhbHVlID0gY29uZmlnLndlaWdodGVkX3F1b3J1bVswXQogICAgYnl0ZWMgNDMgLy8gMHg3NzY1Njk2NzY4NzQ2NTY0NWY3MTc1NmY3Mjc1NmQ1ZjczNmQ2MTZjNmMKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjcyOQogICAgLy8gc2VsZi53ZWlnaHRlZF9xdW9ydW1fbWVkaXVtLnZhbHVlID0gVUludDY0KDApICAjIE5vIGxvbmdlciB1c2VkCiAgICBieXRlYyA0NCAvLyAweDc3NjU2OTY3Njg3NDY1NjQ1ZjcxNzU2ZjcyNzU2ZDVmNmQ2NTY0Njk3NTZkCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjczMAogICAgLy8gc2VsZi53ZWlnaHRlZF9xdW9ydW1fbGFyZ2UudmFsdWUgPSBjb25maWcud2VpZ2h0ZWRfcXVvcnVtWzJdCiAgICBzd2FwCiAgICBwdXNoaW50IDE2CiAgICBleHRyYWN0X3VpbnQ2NAogICAgYnl0ZWMgNDUgLy8gMHg3NzY1Njk2NzY4NzQ2NTY0NWY3MTc1NmY3Mjc1NmQ1ZjZjNjE3MjY3NjUKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3MzIKICAgIC8vIHNlbGYuYWJzZW5jZV90b2xlcmFuY2UudmFsdWUgPSBjb25maWcuYWJzZW5jZV90b2xlcmFuY2UKICAgIGR1cAogICAgcHVzaGludCAxODQKICAgIGV4dHJhY3RfdWludDY0CiAgICBieXRlYyAyMiAvLyAweDYxNjI3MzY1NmU2MzY1NWY3NDZmNmM2NTcyNjE2ZTYzNjUKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3MzMKICAgIC8vIHNlbGYuZ292ZXJuYW5jZV9wZXJpb2QudmFsdWUgPSBjb25maWcuZ292ZXJuYW5jZV9wZXJpb2QKICAgIGR1cAogICAgcHVzaGludCAxOTIKICAgIGV4dHJhY3RfdWludDY0CiAgICBieXRlYyA0OSAvLyAweDY3NmY3NjY1NzI2ZTYxNmU2MzY1NWY3MDY1NzI2OTZmNjQKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3MzQKICAgIC8vIHNlbGYuY29tbWl0dGVlX2dyYWNlX3BlcmlvZC52YWx1ZSA9IGNvbmZpZy5jb21taXR0ZWVfZ3JhY2VfcGVyaW9kCiAgICBwdXNoaW50IDIwMAogICAgZXh0cmFjdF91aW50NjQKICAgIGJ5dGVjIDUwIC8vIDB4NjM2ZjZkNmQ2OTc0NzQ2NTY1NWY2NzcyNjE2MzY1NWY3MDY1NzI2OTZmNjQKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo2MTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpjb25maWdfeGdvdl9yZWdpc3RyeV9ib29sX2ZhbHNlQDMwOgogICAgaW50Y18wIC8vIDAKICAgIGIgY29uZmlnX3hnb3ZfcmVnaXN0cnlfYm9vbF9tZXJnZUAzMQoKY29uZmlnX3hnb3ZfcmVnaXN0cnlfYm9vbF9mYWxzZUAyNjoKICAgIGludGNfMCAvLyAwCiAgICBiIGNvbmZpZ194Z292X3JlZ2lzdHJ5X2Jvb2xfbWVyZ2VAMjcKCmNvbmZpZ194Z292X3JlZ2lzdHJ5X2Jvb2xfZmFsc2VAMjI6CiAgICBpbnRjXzAgLy8gMAogICAgYiBjb25maWdfeGdvdl9yZWdpc3RyeV9ib29sX21lcmdlQDIzCgpjb25maWdfeGdvdl9yZWdpc3RyeV9ib29sX2ZhbHNlQDE2OgogICAgaW50Y18wIC8vIDAKICAgIGIgY29uZmlnX3hnb3ZfcmVnaXN0cnlfYm9vbF9tZXJnZUAxNwoKY29uZmlnX3hnb3ZfcmVnaXN0cnlfYm9vbF9mYWxzZUAxMDoKICAgIGludGNfMCAvLyAwCiAgICBiIGNvbmZpZ194Z292X3JlZ2lzdHJ5X2Jvb2xfbWVyZ2VAMTEKCmNvbmZpZ194Z292X3JlZ2lzdHJ5X2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIGNvbmZpZ194Z292X3JlZ2lzdHJ5X2Jvb2xfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy54Z292X3JlZ2lzdHJ5LmNvbnRyYWN0LlhHb3ZSZWdpc3RyeS51cGRhdGVfeGdvdl9yZWdpc3RyeVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnVwZGF0ZV94Z292X3JlZ2lzdHJ5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NzQ1CiAgICAvLyBhc3NlcnQgc2VsZi5pc194Z292X21hbmFnZXIoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgY2FsbHN1YiBpc194Z292X21hbmFnZXIKICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjczNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJVcGRhdGVBcHBsaWNhdGlvbiJdKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy54Z292X3JlZ2lzdHJ5LmNvbnRyYWN0LlhHb3ZSZWdpc3RyeS5zdWJzY3JpYmVfeGdvdltyb3V0aW5nXSgpIC0+IHZvaWQ6CnN1YnNjcmliZV94Z292OgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NzQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojc2NAogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLnBhdXNlZF9yZWdpc3RyeS52YWx1ZSwgZXJyLlBBVVNFRF9SRUdJU1RSWQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gMHg3MDYxNzU3MzY1NjQ1ZjcyNjU2NzY5NzM3NDcyNzkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wYXVzZWRfcmVnaXN0cnkgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQgLy8gUmVnaXN0cnkncyBub24tYWRtaW4gbWV0aG9kcyBhcmUgcGF1c2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyMjcKICAgIC8vIHJldHVybiBhIGluIHNlbGYueGdvdl9ib3gKICAgIGJ5dGVjXzEgLy8gMHg3OAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NzY1CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuaGFzX3hnb3Zfc3RhdHVzKFR4bi5zZW5kZXIpLCBlcnIuQUxSRUFEWV9YR09WCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyMjcKICAgIC8vIHJldHVybiBhIGluIHNlbGYueGdvdl9ib3gKICAgIGNvbmNhdAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3NjUKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5oYXNfeGdvdl9zdGF0dXMoVHhuLnNlbmRlciksIGVyci5BTFJFQURZX1hHT1YKICAgICEKICAgIGFzc2VydCAvLyBBbHJlYWR5IGFuIHhHb3YKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojc2NgogICAgLy8gYXNzZXJ0IHNlbGYudmFsaWRfeGdvdl9wYXltZW50KHBheW1lbnQpLCBlcnIuSU5WQUxJRF9QQVlNRU5UCiAgICBjYWxsc3ViIHZhbGlkX3hnb3ZfcGF5bWVudAogICAgYXNzZXJ0IC8vIEludmFsaWQgcGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NzY5CiAgICAvLyB4Z292X2FkZHJlc3M9VHhuLnNlbmRlciwgdm90aW5nX2FkZHJlc3M9dm90aW5nX2FkZHJlc3MKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojc2OC03NzAKICAgIC8vIHNlbGYuc3Vic2NyaWJlX3hnb3ZfYW5kX2VtaXQoCiAgICAvLyAgICAgeGdvdl9hZGRyZXNzPVR4bi5zZW5kZXIsIHZvdGluZ19hZGRyZXNzPXZvdGluZ19hZGRyZXNzCiAgICAvLyApCiAgICBzd2FwCiAgICBjYWxsc3ViIHN1YnNjcmliZV94Z292X2FuZF9lbWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3NDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LnVuc3Vic2NyaWJlX3hnb3Zbcm91dGluZ10oKSAtPiB2b2lkOgp1bnN1YnNjcmliZV94Z292OgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NzgyCiAgICAvLyBhc3NlcnQgbm90IHNlbGYucGF1c2VkX3JlZ2lzdHJ5LnZhbHVlLCBlcnIuUEFVU0VEX1JFR0lTVFJZCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAweDcwNjE3NTczNjU2NDVmNzI2NTY3Njk3Mzc0NzI3OQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnBhdXNlZF9yZWdpc3RyeSBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBSZWdpc3RyeSdzIG5vbi1hZG1pbiBtZXRob2RzIGFyZSBwYXVzZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIyNwogICAgLy8gcmV0dXJuIGEgaW4gc2VsZi54Z292X2JveAogICAgYnl0ZWNfMSAvLyAweDc4CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3ODMKICAgIC8vIGFzc2VydCBzZWxmLmhhc194Z292X3N0YXR1cyhUeG4uc2VuZGVyKSwgZXJyLk5PVF9YR09WCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyMjcKICAgIC8vIHJldHVybiBhIGluIHNlbGYueGdvdl9ib3gKICAgIGNvbmNhdAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo3ODMKICAgIC8vIGFzc2VydCBzZWxmLmhhc194Z292X3N0YXR1cyhUeG4uc2VuZGVyKSwgZXJyLk5PVF9YR09WCiAgICBhc3NlcnQgLy8gTm90IGFuIHhHb3YKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojc4NQogICAgLy8gc2VsZi51bnN1YnNjcmliZV94Z292X2FuZF9lbWl0KFR4bi5zZW5kZXIpCiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIHVuc3Vic2NyaWJlX3hnb3ZfYW5kX2VtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojc3MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMueGdvdl9yZWdpc3RyeS5jb250cmFjdC5YR292UmVnaXN0cnkudW5zdWJzY3JpYmVfYWJzZW50ZWVbcm91dGluZ10oKSAtPiB2b2lkOgp1bnN1YnNjcmliZV9hYnNlbnRlZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojc4NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6ODAyCiAgICAvLyBhc3NlcnQgbm90IHNlbGYucGF1c2VkX3JlZ2lzdHJ5LnZhbHVlLCBlcnIuUEFVU0VEX1JFR0lTVFJZCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAweDcwNjE3NTczNjU2NDVmNzI2NTY3Njk3Mzc0NzI3OQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnBhdXNlZF9yZWdpc3RyeSBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBSZWdpc3RyeSdzIG5vbi1hZG1pbiBtZXRob2RzIGFyZSBwYXVzZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIyNwogICAgLy8gcmV0dXJuIGEgaW4gc2VsZi54Z292X2JveAogICAgYnl0ZWNfMSAvLyAweDc4CiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6ODAzCiAgICAvLyBhc3NlcnQgc2VsZi5oYXNfeGdvdl9zdGF0dXMoeGdvdl9hZGRyZXNzKSwgZXJyLk5PVF9YR09WCiAgICBhc3NlcnQgLy8gTm90IGFuIHhHb3YKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjgwNAogICAgLy8gYXNzZXJ0IHNlbGYueGdvdl9ib3hbeGdvdl9hZGRyZXNzXS50b2xlcmF0ZWRfYWJzZW5jZXMgPT0gMCwgZXJyLlVOQVVUSE9SSVpFRAogICAgYm94X2dldAogICAgcG9wCiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICAhCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo4MDYKICAgIC8vIHNlbGYudW5zdWJzY3JpYmVfeGdvdl9hbmRfZW1pdCh4Z292X2FkZHJlc3MpCiAgICBjYWxsc3ViIHVuc3Vic2NyaWJlX3hnb3ZfYW5kX2VtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojc4NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMueGdvdl9yZWdpc3RyeS5jb250cmFjdC5YR292UmVnaXN0cnkucmVxdWVzdF9zdWJzY3JpYmVfeGdvdltyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlcXVlc3Rfc3Vic2NyaWJlX3hnb3Y6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo4MDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo4MzMKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IG93bmVyX2FkZHJlc3MsIGVyci5VTkFVVEhPUklaRUQKICAgIHR4biBTZW5kZXIKICAgIGRpZyAzCiAgICA9PQogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6ODM0CiAgICAvLyBhc3NlcnQgbm90IHNlbGYucGF1c2VkX3JlZ2lzdHJ5LnZhbHVlLCBlcnIuUEFVU0VEX1JFR0lTVFJZCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAweDcwNjE3NTczNjU2NDVmNzI2NTY3Njk3Mzc0NzI3OQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnBhdXNlZF9yZWdpc3RyeSBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBSZWdpc3RyeSdzIG5vbi1hZG1pbiBtZXRob2RzIGFyZSBwYXVzZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIyNwogICAgLy8gcmV0dXJuIGEgaW4gc2VsZi54Z292X2JveAogICAgYnl0ZWNfMSAvLyAweDc4CiAgICBkaWcgNAogICAgY29uY2F0CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjgzNQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmhhc194Z292X3N0YXR1cyh4Z292X2FkZHJlc3MpLCBlcnIuQUxSRUFEWV9YR09WCiAgICAhCiAgICBhc3NlcnQgLy8gQWxyZWFkeSBhbiB4R292CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo4MzYKICAgIC8vIGFzc2VydCBzZWxmLnZhbGlkX3hnb3ZfcGF5bWVudChwYXltZW50KSwgZXJyLklOVkFMSURfUEFZTUVOVAogICAgY2FsbHN1YiB2YWxpZF94Z292X3BheW1lbnQKICAgIGFzc2VydCAvLyBJbnZhbGlkIHBheW1lbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjgzOC04MzkKICAgIC8vICMgY3JlYXRlIHJlcXVlc3QgYm94CiAgICAvLyByaWQgPSBzZWxmLnJlcXVlc3RfaWQudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMiAvLyAweDcyNjU3MTc1NjU3Mzc0NWY2OTY0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVxdWVzdF9pZCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg0MC04NDQKICAgIC8vIHNlbGYucmVxdWVzdF9ib3hbcmlkXSA9IHR5cC5YR292U3Vic2NyaWJlUmVxdWVzdEJveFZhbHVlKAogICAgLy8gICAgIHhnb3ZfYWRkcj14Z292X2FkZHJlc3MsCiAgICAvLyAgICAgb3duZXJfYWRkcj1vd25lcl9hZGRyZXNzLAogICAgLy8gICAgIHJlbGF0aW9uX3R5cGU9cmVsYXRpb25fdHlwZSwKICAgIC8vICkKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo4NDAKICAgIC8vIHNlbGYucmVxdWVzdF9ib3hbcmlkXSA9IHR5cC5YR292U3Vic2NyaWJlUmVxdWVzdEJveFZhbHVlKAogICAgZGlnIDEKICAgIGl0b2IKICAgIGJ5dGVjIDIzIC8vIDB4NzIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6ODQwLTg0NAogICAgLy8gc2VsZi5yZXF1ZXN0X2JveFtyaWRdID0gdHlwLlhHb3ZTdWJzY3JpYmVSZXF1ZXN0Qm94VmFsdWUoCiAgICAvLyAgICAgeGdvdl9hZGRyPXhnb3ZfYWRkcmVzcywKICAgIC8vICAgICBvd25lcl9hZGRyPW93bmVyX2FkZHJlc3MsCiAgICAvLyAgICAgcmVsYXRpb25fdHlwZT1yZWxhdGlvbl90eXBlLAogICAgLy8gKQogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6ODQ2LTg0NwogICAgLy8gIyBpbmNyZW1lbnQgcmVxdWVzdCBpZAogICAgLy8gc2VsZi5yZXF1ZXN0X2lkLnZhbHVlICs9IDEKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBieXRlYyAxMiAvLyAweDcyNjU3MTc1NjU3Mzc0NWY2OTY0CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6ODA4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy54Z292X3JlZ2lzdHJ5LmNvbnRyYWN0LlhHb3ZSZWdpc3RyeS5hcHByb3ZlX3N1YnNjcmliZV94Z292W3JvdXRpbmddKCkgLT4gdm9pZDoKYXBwcm92ZV9zdWJzY3JpYmVfeGdvdjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg2MgogICAgLy8gYXNzZXJ0IHNlbGYuaXNfeGdvdl9zdWJzY3JpYmVyKCksIGVyci5VTkFVVEhPUklaRUQKICAgIGNhbGxzdWIgaXNfeGdvdl9zdWJzY3JpYmVyCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo4NjQKICAgIC8vIHhnb3ZfYWRkcmVzcyA9IHNlbGYucmVxdWVzdF9ib3hbcmVxdWVzdF9pZF0ueGdvdl9hZGRyCiAgICBpdG9iCiAgICBieXRlYyAyMyAvLyAweDcyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVxdWVzdF9ib3ggZW50cnkgZXhpc3RzCiAgICBkdXAKICAgIGV4dHJhY3QgMCAzMgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6ODY1CiAgICAvLyB2b3RpbmdfYWRkcmVzcyA9IHNlbGYucmVxdWVzdF9ib3hbcmVxdWVzdF9pZF0ub3duZXJfYWRkcgogICAgc3dhcAogICAgZXh0cmFjdCAzMiAzMgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjI3CiAgICAvLyByZXR1cm4gYSBpbiBzZWxmLnhnb3ZfYm94CiAgICBieXRlY18xIC8vIDB4NzgKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6ODY2CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuaGFzX3hnb3Zfc3RhdHVzKHhnb3ZfYWRkcmVzcyksIGVyci5BTFJFQURZX1hHT1YKICAgICEKICAgIGFzc2VydCAvLyBBbHJlYWR5IGFuIHhHb3YKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg2OC04NzAKICAgIC8vIHNlbGYuc3Vic2NyaWJlX3hnb3ZfYW5kX2VtaXQoCiAgICAvLyAgICAgeGdvdl9hZGRyZXNzPXhnb3ZfYWRkcmVzcywgdm90aW5nX2FkZHJlc3M9dm90aW5nX2FkZHJlc3MKICAgIC8vICkKICAgIGNhbGxzdWIgc3Vic2NyaWJlX3hnb3ZfYW5kX2VtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg3Mi04NzMKICAgIC8vICMgZGVsZXRlIHRoZSByZXF1ZXN0CiAgICAvLyBkZWwgc2VsZi5yZXF1ZXN0X2JveFtyZXF1ZXN0X2lkXQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo4NDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LnJlamVjdF9zdWJzY3JpYmVfeGdvdltyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlamVjdF9zdWJzY3JpYmVfeGdvdjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg4NwogICAgLy8gYXNzZXJ0IHNlbGYuaXNfeGdvdl9zdWJzY3JpYmVyKCksIGVyci5VTkFVVEhPUklaRUQKICAgIGNhbGxzdWIgaXNfeGdvdl9zdWJzY3JpYmVyCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo4ODktODkwCiAgICAvLyAjIGRlbGV0ZSB0aGUgcmVxdWVzdAogICAgLy8gZGVsIHNlbGYucmVxdWVzdF9ib3hbcmVxdWVzdF9pZF0KICAgIGl0b2IKICAgIGJ5dGVjIDIzIC8vIDB4NzIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo4NzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LnJlcXVlc3RfdW5zdWJzY3JpYmVfeGdvdltyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlcXVlc3RfdW5zdWJzY3JpYmVfeGdvdjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg5MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjkxNwogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gb3duZXJfYWRkcmVzcywgZXJyLlVOQVVUSE9SSVpFRAogICAgdHhuIFNlbmRlcgogICAgZGlnIDMKICAgID09CiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo5MTgKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5wYXVzZWRfcmVnaXN0cnkudmFsdWUsIGVyci5QQVVTRURfUkVHSVNUUlkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vIDB4NzA2MTc1NzM2NTY0NWY3MjY1Njc2OTczNzQ3Mjc5CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucGF1c2VkX3JlZ2lzdHJ5IGV4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIFJlZ2lzdHJ5J3Mgbm9uLWFkbWluIG1ldGhvZHMgYXJlIHBhdXNlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjI3CiAgICAvLyByZXR1cm4gYSBpbiBzZWxmLnhnb3ZfYm94CiAgICBieXRlY18xIC8vIDB4NzgKICAgIGRpZyA0CiAgICBjb25jYXQKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6OTE5CiAgICAvLyBhc3NlcnQgc2VsZi5oYXNfeGdvdl9zdGF0dXMoeGdvdl9hZGRyZXNzKSwgZXJyLk5PVF9YR09WCiAgICBhc3NlcnQgLy8gTm90IGFuIHhHb3YKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjkyMAogICAgLy8gYXNzZXJ0IHNlbGYudmFsaWRfeGdvdl9wYXltZW50KHBheW1lbnQpLCBlcnIuSU5WQUxJRF9QQVlNRU5UCiAgICBjYWxsc3ViIHZhbGlkX3hnb3ZfcGF5bWVudAogICAgYXNzZXJ0IC8vIEludmFsaWQgcGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6OTIyLTkyMwogICAgLy8gIyBjcmVhdGUgdW5zdWJzY3JpYmUgcmVxdWVzdCBib3gKICAgIC8vIHJ1aWQgPSBzZWxmLnJlcXVlc3RfaWQudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMiAvLyAweDcyNjU3MTc1NjU3Mzc0NWY2OTY0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVxdWVzdF9pZCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjkyNC05MjgKICAgIC8vIHNlbGYucmVxdWVzdF91bnN1YnNjcmliZV9ib3hbcnVpZF0gPSB0eXAuWEdvdlN1YnNjcmliZVJlcXVlc3RCb3hWYWx1ZSgKICAgIC8vICAgICB4Z292X2FkZHI9eGdvdl9hZGRyZXNzLAogICAgLy8gICAgIG93bmVyX2FkZHI9b3duZXJfYWRkcmVzcywKICAgIC8vICAgICByZWxhdGlvbl90eXBlPXJlbGF0aW9uX3R5cGUsCiAgICAvLyApCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6OTI0CiAgICAvLyBzZWxmLnJlcXVlc3RfdW5zdWJzY3JpYmVfYm94W3J1aWRdID0gdHlwLlhHb3ZTdWJzY3JpYmVSZXF1ZXN0Qm94VmFsdWUoCiAgICBkaWcgMQogICAgaXRvYgogICAgYnl0ZWMgMjQgLy8gMHg3Mjc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjkyNC05MjgKICAgIC8vIHNlbGYucmVxdWVzdF91bnN1YnNjcmliZV9ib3hbcnVpZF0gPSB0eXAuWEdvdlN1YnNjcmliZVJlcXVlc3RCb3hWYWx1ZSgKICAgIC8vICAgICB4Z292X2FkZHI9eGdvdl9hZGRyZXNzLAogICAgLy8gICAgIG93bmVyX2FkZHI9b3duZXJfYWRkcmVzcywKICAgIC8vICAgICByZWxhdGlvbl90eXBlPXJlbGF0aW9uX3R5cGUsCiAgICAvLyApCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo5MzAtOTMxCiAgICAvLyAjIGluY3JlbWVudCByZXF1ZXN0IGlkCiAgICAvLyBzZWxmLnJlcXVlc3RfaWQudmFsdWUgKz0gMQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ5dGVjIDEyIC8vIDB4NzI2NTcxNzU2NTczNzQ1ZjY5NjQKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo4OTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LmFwcHJvdmVfdW5zdWJzY3JpYmVfeGdvdltyb3V0aW5nXSgpIC0+IHZvaWQ6CmFwcHJvdmVfdW5zdWJzY3JpYmVfeGdvdjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjkzMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojk0NgogICAgLy8gYXNzZXJ0IHNlbGYuaXNfeGdvdl9zdWJzY3JpYmVyKCksIGVyci5VTkFVVEhPUklaRUQKICAgIGNhbGxzdWIgaXNfeGdvdl9zdWJzY3JpYmVyCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo5NDgKICAgIC8vIHhnb3ZfYWRkcmVzcyA9IHNlbGYucmVxdWVzdF91bnN1YnNjcmliZV9ib3hbcmVxdWVzdF9pZF0ueGdvdl9hZGRyCiAgICBpdG9iCiAgICBieXRlYyAyNCAvLyAweDcyNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXF1ZXN0X3Vuc3Vic2NyaWJlX2JveCBlbnRyeSBleGlzdHMKICAgIGV4dHJhY3QgMCAzMgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjI3CiAgICAvLyByZXR1cm4gYSBpbiBzZWxmLnhnb3ZfYm94CiAgICBieXRlY18xIC8vIDB4NzgKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6OTQ5CiAgICAvLyBhc3NlcnQgc2VsZi5oYXNfeGdvdl9zdGF0dXMoeGdvdl9hZGRyZXNzKSwgZXJyLk5PVF9YR09WCiAgICBhc3NlcnQgLy8gTm90IGFuIHhHb3YKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojk1MQogICAgLy8gc2VsZi51bnN1YnNjcmliZV94Z292X2FuZF9lbWl0KHhnb3ZfYWRkcmVzcykKICAgIGNhbGxzdWIgdW5zdWJzY3JpYmVfeGdvdl9hbmRfZW1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6OTUzLTk1NAogICAgLy8gIyBkZWxldGUgdGhlIHJlcXVlc3QKICAgIC8vIGRlbCBzZWxmLnJlcXVlc3RfdW5zdWJzY3JpYmVfYm94W3JlcXVlc3RfaWRdCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjkzMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMueGdvdl9yZWdpc3RyeS5jb250cmFjdC5YR292UmVnaXN0cnkucmVqZWN0X3Vuc3Vic2NyaWJlX3hnb3Zbcm91dGluZ10oKSAtPiB2b2lkOgpyZWplY3RfdW5zdWJzY3JpYmVfeGdvdjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojk1NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojk2OAogICAgLy8gYXNzZXJ0IHNlbGYuaXNfeGdvdl9zdWJzY3JpYmVyKCksIGVyci5VTkFVVEhPUklaRUQKICAgIGNhbGxzdWIgaXNfeGdvdl9zdWJzY3JpYmVyCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo5NzAtOTcxCiAgICAvLyAjIGRlbGV0ZSB0aGUgcmVxdWVzdAogICAgLy8gZGVsIHNlbGYucmVxdWVzdF91bnN1YnNjcmliZV9ib3hbcmVxdWVzdF9pZF0KICAgIGl0b2IKICAgIGJ5dGVjIDI0IC8vIDB4NzI3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojk1NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMueGdvdl9yZWdpc3RyeS5jb250cmFjdC5YR292UmVnaXN0cnkuc2V0X3ZvdGluZ19hY2NvdW50W3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0X3ZvdGluZ19hY2NvdW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6OTczCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojk5MAogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLnBhdXNlZF9yZWdpc3RyeS52YWx1ZSwgZXJyLlBBVVNFRF9SRUdJU1RSWQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gMHg3MDYxNzU3MzY1NjQ1ZjcyNjU2NzY5NzM3NDcyNzkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wYXVzZWRfcmVnaXN0cnkgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQgLy8gUmVnaXN0cnkncyBub24tYWRtaW4gbWV0aG9kcyBhcmUgcGF1c2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyMjcKICAgIC8vIHJldHVybiBhIGluIHNlbGYueGdvdl9ib3gKICAgIGJ5dGVjXzEgLy8gMHg3OAogICAgZGlnIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojk5MQogICAgLy8gYXNzZXJ0IHNlbGYuaGFzX3hnb3Zfc3RhdHVzKHhnb3ZfYWRkcmVzcyksIGVyci5OT1RfWEdPVgogICAgYXNzZXJ0IC8vIE5vdCBhbiB4R292CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo5OTIKICAgIC8vIGFzc2VydCBzZWxmLmNhbGxlcl9pc194Z292X29yX3ZvdGluZ19hZGRyZXNzKHhnb3ZfYWRkcmVzcyksIGVyci5VTkFVVEhPUklaRUQKICAgIHVuY292ZXIgMgogICAgY2FsbHN1YiBjYWxsZXJfaXNfeGdvdl9vcl92b3RpbmdfYWRkcmVzcwogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6OTk0LTk5NQogICAgLy8gIyBVcGRhdGUgdGhlIHZvdGluZyBhY2NvdW50IGluIHRoZSB4R292IGJveAogICAgLy8gc2VsZi54Z292X2JveFt4Z292X2FkZHJlc3NdLnZvdGluZ19hZGRyZXNzID0gdm90aW5nX2FkZHJlc3MKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlIC8vIG9uIGVycm9yOiBpbmRleCBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo5NzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LnN1YnNjcmliZV9wcm9wb3Nlcltyb3V0aW5nXSgpIC0+IHZvaWQ6CnN1YnNjcmliZV9wcm9wb3NlcjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojk5NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTAxMQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLnBhdXNlZF9yZWdpc3RyeS52YWx1ZSwgZXJyLlBBVVNFRF9SRUdJU1RSWQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gMHg3MDYxNzU3MzY1NjQ1ZjcyNjU2NzY5NzM3NDcyNzkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wYXVzZWRfcmVnaXN0cnkgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQgLy8gUmVnaXN0cnkncyBub24tYWRtaW4gbWV0aG9kcyBhcmUgcGF1c2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMDEzCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciBub3QgaW4gc2VsZi5wcm9wb3Nlcl9ib3gsIGVyci5BTFJFQURZX1BST1BPU0VSCiAgICBieXRlY18zIC8vIDB4NzAKICAgIHR4biBTZW5kZXIKICAgIGNvbmNhdAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gQWxyZWFkeSBhIHByb3Bvc2VyCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMDE2CiAgICAvLyBwYXltZW50LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIGR1cAogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTAxNC0xMDE3CiAgICAvLyAjIGNoZWNrIGZlZQogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBwYXltZW50LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIC8vICksIGVyci5XUk9OR19SRUNFSVZFUgogICAgYXNzZXJ0IC8vIFdyb25nIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMDE4CiAgICAvLyBhc3NlcnQgcGF5bWVudC5hbW91bnQgPT0gc2VsZi5wcm9wb3Nlcl9mZWUudmFsdWUsIGVyci5XUk9OR19QQVlNRU5UX0FNT1VOVAogICAgZ3R4bnMgQW1vdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjAgLy8gMHg3MDcyNmY3MDZmNzM2NTcyNWY2NjY1NjUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcm9wb3Nlcl9mZWUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIHBheW1lbnQgYW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMDIwCiAgICAvLyBzZWxmLnByb3Bvc2VyX2JveFtUeG4uc2VuZGVyXSA9IHNlbGYubWFrZV9wcm9wb3Nlcl9ib3goCiAgICBieXRlY18zIC8vIDB4NzAKICAgIHR4biBTZW5kZXIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6NDA1LTQwOQogICAgLy8gcmV0dXJuIHR5cC5Qcm9wb3NlckJveFZhbHVlKAogICAgLy8gICAgIGFjdGl2ZV9wcm9wb3NhbD1hY3RpdmVfcHJvcG9zYWwsCiAgICAvLyAgICAga3ljX3N0YXR1cz1reWNfc3RhdHVzLAogICAgLy8gICAgIGt5Y19leHBpcmluZz1reWNfZXhwaXJpbmcsCiAgICAvLyApCiAgICBieXRlYyA1MiAvLyAweDAwMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTAyMC0xMDIyCiAgICAvLyBzZWxmLnByb3Bvc2VyX2JveFtUeG4uc2VuZGVyXSA9IHNlbGYubWFrZV9wcm9wb3Nlcl9ib3goCiAgICAvLyAgICAgYWN0aXZlX3Byb3Bvc2FsPUZhbHNlLCBreWNfc3RhdHVzPUZhbHNlLCBreWNfZXhwaXJpbmc9VUludDY0KDApCiAgICAvLyApCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMDI0CiAgICAvLyBhcmM0LmVtaXQodHlwLlByb3Bvc2VyU3Vic2NyaWJlZChwcm9wb3Nlcj1UeG4uc2VuZGVyLCByb3VuZD1HbG9iYWwucm91bmQpKQogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIFJvdW5kCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDFhYzRlZGNkIC8vIG1ldGhvZCAiUHJvcG9zZXJTdWJzY3JpYmVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo5OTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LnNldF9wcm9wb3Nlcl9reWNbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfcHJvcG9zZXJfa3ljOgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTAyNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwNDctMTA0OAogICAgLy8gIyBjaGVjayBpZiBreWMgcHJvdmlkZXIKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IHNlbGYua3ljX3Byb3ZpZGVyLnZhbHVlLCBlcnIuVU5BVVRIT1JJWkVECiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTYgLy8gMHg2Yjc5NjM1ZjcwNzI2Zjc2Njk2NDY1NzIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5reWNfcHJvdmlkZXIgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTA0OQogICAgLy8gYXNzZXJ0IHByb3Bvc2VyIGluIHNlbGYucHJvcG9zZXJfYm94LCBlcnIuUFJPUE9TRVJfRE9FU19OT1RfRVhJU1QKICAgIGJ5dGVjXzMgLy8gMHg3MAogICAgZGlnIDMKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBQcm9wb3NlciBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTA1MQogICAgLy8gYWN0aXZlX3Byb3Bvc2FsID0gc2VsZi5wcm9wb3Nlcl9ib3hbcHJvcG9zZXJdLmNvcHkoKS5hY3RpdmVfcHJvcG9zYWwKICAgIGR1cAogICAgYm94X2dldAogICAgcG9wCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTo0MDUtNDA5CiAgICAvLyByZXR1cm4gdHlwLlByb3Bvc2VyQm94VmFsdWUoCiAgICAvLyAgICAgYWN0aXZlX3Byb3Bvc2FsPWFjdGl2ZV9wcm9wb3NhbCwKICAgIC8vICAgICBreWNfc3RhdHVzPWt5Y19zdGF0dXMsCiAgICAvLyAgICAga3ljX2V4cGlyaW5nPWt5Y19leHBpcmluZywKICAgIC8vICkKICAgIGJ5dGVjIDYgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBpbnRjXzEgLy8gMQogICAgdW5jb3ZlciA0CiAgICBzZXRiaXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMDUzLTEwNTcKICAgIC8vIHNlbGYucHJvcG9zZXJfYm94W3Byb3Bvc2VyXSA9IHNlbGYubWFrZV9wcm9wb3Nlcl9ib3goCiAgICAvLyAgICAgYWN0aXZlX3Byb3Bvc2FsPWFjdGl2ZV9wcm9wb3NhbCwKICAgIC8vICAgICBreWNfc3RhdHVzPWt5Y19zdGF0dXMsCiAgICAvLyAgICAga3ljX2V4cGlyaW5nPWt5Y19leHBpcmluZywKICAgIC8vICkKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwNjIKICAgIC8vIHZhbGlkX2t5Yz1ib29sKHNlbGYudmFsaWRfa3ljKHByb3Bvc2VyKSksCiAgICBkdXAKICAgIGNhbGxzdWIgdmFsaWRfa3ljCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMDYzCiAgICAvLyByb3VuZD1HbG9iYWwucm91bmQsCiAgICBnbG9iYWwgUm91bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwNjAtMTA2NAogICAgLy8gdHlwLlByb3Bvc2VyS1lDKAogICAgLy8gICAgIHByb3Bvc2VyPXByb3Bvc2VyLAogICAgLy8gICAgIHZhbGlkX2t5Yz1ib29sKHNlbGYudmFsaWRfa3ljKHByb3Bvc2VyKSksCiAgICAvLyAgICAgcm91bmQ9R2xvYmFsLnJvdW5kLAogICAgLy8gKQogICAgYnl0ZWMgNiAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwNTktMTA2NQogICAgLy8gYXJjNC5lbWl0KAogICAgLy8gICAgIHR5cC5Qcm9wb3NlcktZQygKICAgIC8vICAgICAgICAgcHJvcG9zZXI9cHJvcG9zZXIsCiAgICAvLyAgICAgICAgIHZhbGlkX2t5Yz1ib29sKHNlbGYudmFsaWRfa3ljKHByb3Bvc2VyKSksCiAgICAvLyAgICAgICAgIHJvdW5kPUdsb2JhbC5yb3VuZCwKICAgIC8vICAgICApCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHg5YjVhZjc2MSAvLyBtZXRob2QgIlByb3Bvc2VyS1lDKGFkZHJlc3MsYm9vbCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwMjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LmRlY2xhcmVfY29tbWl0dGVlW3JvdXRpbmddKCkgLT4gdm9pZDoKZGVjbGFyZV9jb21taXR0ZWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMDY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyMjQKICAgIC8vIHJldHVybiBUeG4uc2VuZGVyID09IHNlbGYuY29tbWl0dGVlX21hbmFnZXIudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNyAvLyAweDYzNmY2ZDZkNjk3NDc0NjU2NTVmNmQ2MTZlNjE2NzY1NzIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jb21taXR0ZWVfbWFuYWdlciBleGlzdHMKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMDg3CiAgICAvLyBhc3NlcnQgc2VsZi5pc194Z292X2NvbW1pdHRlZV9tYW5hZ2VyKCksIGVyci5VTkFVVEhPUklaRUQKICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwODkKICAgIC8vIGFzc2VydCBzaXplID4gMCwgZXJyLldST05HX0NPTU1JVFRFRV9NRU1CRVJTCiAgICBkaWcgMQogICAgYXNzZXJ0IC8vIFdyb25nIENvbW1pdHRlZSBNZW1iZXJzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMDkwCiAgICAvLyBhc3NlcnQgdm90ZXMgPiAwLCBlcnIuV1JPTkdfQ09NTUlUVEVFX1ZPVEVTCiAgICBkdXAKICAgIGFzc2VydCAvLyBXcm9uZyBDb21taXR0ZWUgVm90ZXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwOTEKICAgIC8vIGFzc2VydCBzaXplIDw9IHNlbGYubWF4X2NvbW1pdHRlZV9zaXplLnZhbHVlLCBlcnIuQ09NTUlUVEVFX1NJWkVfVE9PX0xBUkdFCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNDggLy8gMHg2ZDYxNzg1ZjYzNmY2ZDZkNjk3NDc0NjU2NTVmNzM2OTdhNjUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tYXhfY29tbWl0dGVlX3NpemUgZXhpc3RzCiAgICBkaWcgMgogICAgPj0KICAgIGFzc2VydCAvLyBDb21taXR0ZWUgc2l6ZSBpcyB0b28gbGFyZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwOTMKICAgIC8vIHNlbGYuY29tbWl0dGVlX2lkLnZhbHVlID0gY29tbWl0dGVlX2lkLmNvcHkoKQogICAgYnl0ZWMgNTMgLy8gMHg2MzZmNmQ2ZDY5NzQ3NDY1NjU1ZjY5NjQKICAgIGRpZyAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTA5NAogICAgLy8gc2VsZi5jb21taXR0ZWVfbWVtYmVycy52YWx1ZSA9IHNpemUKICAgIGJ5dGVjIDQ2IC8vIDB4NjM2ZjZkNmQ2OTc0NzQ2NTY1NWY2ZDY1NmQ2MjY1NzI3MwogICAgZGlnIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMDk1CiAgICAvLyBzZWxmLmNvbW1pdHRlZV92b3Rlcy52YWx1ZSA9IHZvdGVzCiAgICBieXRlYyA0NyAvLyAweDYzNmY2ZDZkNjk3NDc0NjU2NTVmNzY2Zjc0NjU3MwogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMDk2CiAgICAvLyBzZWxmLmNvbW1pdHRlZV9sYXN0X2FuY2hvci52YWx1ZSA9IHNlbGYuZ2V0X2NvbW1pdHRlZV9hbmNob3IoKQogICAgY2FsbHN1YiBnZXRfY29tbWl0dGVlX2FuY2hvcgogICAgYnl0ZWMgNTEgLy8gMHg2MzZmNmQ2ZDY5NzQ3NDY1NjU1ZjZjNjE3Mzc0NWY2MTZlNjM2ODZmNzIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTAxCiAgICAvLyBzaXplPWFyYzQuVUludDMyKHNpemUpLAogICAgc3dhcAogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIGludGNfMiAvLyAzMgogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA0IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExMDIKICAgIC8vIHZvdGVzPWFyYzQuVUludDMyKHZvdGVzKSwKICAgIHN3YXAKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzIgLy8gMzIKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNCA0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTAzCiAgICAvLyByb3VuZD1HbG9iYWwucm91bmQsCiAgICBnbG9iYWwgUm91bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwOTktMTEwNAogICAgLy8gdHlwLk5ld0NvbW1pdHRlZSgKICAgIC8vICAgICBjb21taXR0ZWVfaWQ9Y29tbWl0dGVlX2lkLAogICAgLy8gICAgIHNpemU9YXJjNC5VSW50MzIoc2l6ZSksCiAgICAvLyAgICAgdm90ZXM9YXJjNC5VSW50MzIodm90ZXMpLAogICAgLy8gICAgIHJvdW5kPUdsb2JhbC5yb3VuZCwKICAgIC8vICkKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwOTgtMTEwNQogICAgLy8gYXJjNC5lbWl0KAogICAgLy8gICAgIHR5cC5OZXdDb21taXR0ZWUoCiAgICAvLyAgICAgICAgIGNvbW1pdHRlZV9pZD1jb21taXR0ZWVfaWQsCiAgICAvLyAgICAgICAgIHNpemU9YXJjNC5VSW50MzIoc2l6ZSksCiAgICAvLyAgICAgICAgIHZvdGVzPWFyYzQuVUludDMyKHZvdGVzKSwKICAgIC8vICAgICAgICAgcm91bmQ9R2xvYmFsLnJvdW5kLAogICAgLy8gICAgICkKICAgIC8vICkKICAgIHB1c2hieXRlcyAweDg3OWI1NmE5IC8vIG1ldGhvZCAiTmV3Q29tbWl0dGVlKGJ5dGVbMzJdLHVpbnQzMix1aW50MzIsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMDY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy54Z292X3JlZ2lzdHJ5LmNvbnRyYWN0LlhHb3ZSZWdpc3RyeS5vcGVuX3Byb3Bvc2FsW3JvdXRpbmddKCkgLT4gdm9pZDoKb3Blbl9wcm9wb3NhbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExMDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTI4CiAgICAvLyBhc3NlcnQgbm90IHNlbGYucGF1c2VkX3JlZ2lzdHJ5LnZhbHVlLCBlcnIuUEFVU0VEX1JFR0lTVFJZCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAweDcwNjE3NTczNjU2NDVmNzI2NTY3Njk3Mzc0NzI3OQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnBhdXNlZF9yZWdpc3RyeSBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBSZWdpc3RyeSdzIG5vbi1hZG1pbiBtZXRob2RzIGFyZSBwYXVzZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExMjkKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5wYXVzZWRfcHJvcG9zYWxzLnZhbHVlLCBlcnIuUEFVU0VEX1BST1BPU0FMUwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEwIC8vIDB4NzA2MTc1NzM2NTY0NWY3MDcyNmY3MDZmNzM2MTZjNzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wYXVzZWRfcHJvcG9zYWxzIGV4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIENyZWF0aW9uIG9mIHByb3Bvc2FscyBpcyBwYXVzZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExMzEKICAgIC8vIGNvbW1pdHRlZV9hbmNob3IgPSBzZWxmLmdldF9jb21taXR0ZWVfYW5jaG9yKCkKICAgIGNhbGxzdWIgZ2V0X2NvbW1pdHRlZV9hbmNob3IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExMzIKICAgIC8vIGNvbW1pdHRlZV9kZWxheSA9IEdsb2JhbC5yb3VuZCAtIGNvbW1pdHRlZV9hbmNob3IKICAgIGdsb2JhbCBSb3VuZAogICAgZGlnIDEKICAgIC0KICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExMzQKICAgIC8vIGNvbW1pdHRlZV9hbmNob3IgPT0gc2VsZi5jb21taXR0ZWVfbGFzdF9hbmNob3IudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1MSAvLyAweDYzNmY2ZDZkNjk3NDc0NjU2NTVmNmM2MTczNzQ1ZjYxNmU2MzY4NmY3MgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNvbW1pdHRlZV9sYXN0X2FuY2hvciBleGlzdHMKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTM0LTExMzUKICAgIC8vIGNvbW1pdHRlZV9hbmNob3IgPT0gc2VsZi5jb21taXR0ZWVfbGFzdF9hbmNob3IudmFsdWUKICAgIC8vIG9yIGNvbW1pdHRlZV9kZWxheSA8PSBzZWxmLmNvbW1pdHRlZV9ncmFjZV9wZXJpb2QudmFsdWUKICAgIGJueiBvcGVuX3Byb3Bvc2FsX2Jvb2xfdHJ1ZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTM1CiAgICAvLyBvciBjb21taXR0ZWVfZGVsYXkgPD0gc2VsZi5jb21taXR0ZWVfZ3JhY2VfcGVyaW9kLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNTAgLy8gMHg2MzZmNmQ2ZDY5NzQ3NDY1NjU1ZjY3NzI2MTYzNjU1ZjcwNjU3MjY5NmY2NAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNvbW1pdHRlZV9ncmFjZV9wZXJpb2QgZXhpc3RzCiAgICBkaWcgMgogICAgPj0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExMzQtMTEzNQogICAgLy8gY29tbWl0dGVlX2FuY2hvciA9PSBzZWxmLmNvbW1pdHRlZV9sYXN0X2FuY2hvci52YWx1ZQogICAgLy8gb3IgY29tbWl0dGVlX2RlbGF5IDw9IHNlbGYuY29tbWl0dGVlX2dyYWNlX3BlcmlvZC52YWx1ZQogICAgYnogb3Blbl9wcm9wb3NhbF9ib29sX2ZhbHNlQDQKCm9wZW5fcHJvcG9zYWxfYm9vbF90cnVlQDM6CiAgICBpbnRjXzEgLy8gMQoKb3Blbl9wcm9wb3NhbF9ib29sX21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTMzLTExMzYKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgY29tbWl0dGVlX2FuY2hvciA9PSBzZWxmLmNvbW1pdHRlZV9sYXN0X2FuY2hvci52YWx1ZQogICAgLy8gICAgIG9yIGNvbW1pdHRlZV9kZWxheSA8PSBzZWxmLmNvbW1pdHRlZV9ncmFjZV9wZXJpb2QudmFsdWUKICAgIC8vICksIGVyci5DT01NSVRURUVfU1RBTEUKICAgIGFzc2VydCAvLyBDb21taXR0ZWUgaXMgc3RhbGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExMzgtMTEzOQogICAgLy8gIyBDaGVjayBpZiB0aGUgY2FsbGVyIGlzIGEgcmVnaXN0ZXJlZCBwcm9wb3NlcgogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgaW4gc2VsZi5wcm9wb3Nlcl9ib3gsIGVyci5VTkFVVEhPUklaRUQKICAgIGJ5dGVjXzMgLy8gMHg3MAogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExNDEtMTE0MgogICAgLy8gIyBDaGVjayBpZiB0aGUgcHJvcG9zZXIgYWxyZWFkeSBoYXMgYW4gYWN0aXZlIHByb3Bvc2FsCiAgICAvLyBhc3NlcnQgbm90IHNlbGYucHJvcG9zZXJfYm94WwogICAgYnl0ZWNfMyAvLyAweDcwCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTQzCiAgICAvLyBUeG4uc2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTQxLTExNDQKICAgIC8vICMgQ2hlY2sgaWYgdGhlIHByb3Bvc2VyIGFscmVhZHkgaGFzIGFuIGFjdGl2ZSBwcm9wb3NhbAogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLnByb3Bvc2VyX2JveFsKICAgIC8vICAgICBUeG4uc2VuZGVyCiAgICAvLyBdLmFjdGl2ZV9wcm9wb3NhbCwgZXJyLkFMUkVBRFlfQUNUSVZFX1BST1BPU0FMCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnByb3Bvc2VyX2JveCBlbnRyeSBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgICEKICAgIGFzc2VydCAvLyBQcm9wb3NlciBhbHJlYWR5IGhhcyBhbiBhY3RpdmUgcHJvcG9zYWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExNDUKICAgIC8vIGFzc2VydCBzZWxmLnZhbGlkX2t5YyhUeG4uc2VuZGVyKSwgZXJyLklOVkFMSURfS1lDCiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIHZhbGlkX2t5YwogICAgYXNzZXJ0IC8vIEludmFsaWQgS1lDCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTQ3CiAgICAvLyBhc3NlcnQgVHhuLmZlZSA+PSAoR2xvYmFsLm1pbl90eG5fZmVlICogMyksIGVyci5JTlNVRkZJQ0lFTlRfRkVFCiAgICB0eG4gRmVlCiAgICBnbG9iYWwgTWluVHhuRmVlCiAgICBwdXNoaW50IDMKICAgICoKICAgID49CiAgICBhc3NlcnQgLy8gSW5zdWZmaWNpZW50IGZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTE1MQogICAgLy8gcGF5bWVudC5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExNDktMTE1MgogICAgLy8gIyBFbnN1cmUgdGhlIHRyYW5zYWN0aW9uIGhhcyB0aGUgY29ycmVjdCBwYXltZW50CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHBheW1lbnQucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgLy8gKSwgZXJyLldST05HX1JFQ0VJVkVSCiAgICBhc3NlcnQgLy8gV3JvbmcgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExNTMKICAgIC8vIGFzc2VydCBwYXltZW50LmFtb3VudCA9PSBzZWxmLm9wZW5fcHJvcG9zYWxfZmVlLnZhbHVlLCBlcnIuV1JPTkdfUEFZTUVOVF9BTU9VTlQKICAgIGd0eG5zIEFtb3VudAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIxIC8vIDB4NmY3MDY1NmU1ZjcwNzI2ZjcwNmY3MzYxNmM1ZjY2NjU2NQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm9wZW5fcHJvcG9zYWxfZmVlIGV4aXN0cwogICAgc3dhcAogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQgLy8gV3JvbmcgcGF5bWVudCBhbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExNTUKICAgIC8vIG1icl9iZWZvcmUgPSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmJhbGFuY2UKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTE1NwogICAgLy8gYXNzZXJ0IHNlbGYucHJvcG9zYWxfYXBwcm92YWxfcHJvZ3JhbSwgZXJyLk1JU1NJTkdfUFJPUE9TQUxfQVBQUk9WQUxfUFJPR1JBTQogICAgYnl0ZWMgNSAvLyAweDcwNjEKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBNaXNzaW5nIHByb3Bvc2FsIGFwcHJvdmFsIHByb2dyYW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExNjcKICAgIC8vIHNlbGYucHJvcG9zYWxfYXBwcm92YWxfcHJvZ3JhbS5sZW5ndGggKyBjb21waWxlZF9jbGVhcl9zdGF0ZV8xLmxlbmd0aAogICAgZHVwCiAgICBwdXNoaW50IDQKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExNjUKICAgIC8vIGJ5dGVzX3Blcl9wYWdlID0gVUludDY0KEJZVEVTX1BFUl9BUFBfUEFHRSkKICAgIGludGMgNCAvLyAyMDQ4CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTY5CiAgICAvLyB0b3RhbF9wYWdlcyA9IHRvdGFsX3NpemUgLy8gYnl0ZXNfcGVyX3BhZ2UKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExNzEtMTE3NAogICAgLy8gIyBUaGUgZm9sbG93aW5nIGFzc2VydGlvbiBtYWtlcyBzdXJlIHRoZSBsb29wLXVucm9sbGluZyBpcyBjb25zaXN0ZW50CiAgICAvLyBhc3NlcnQgdG90YWxfcGFnZXMgPT0gVUludDY0KAogICAgLy8gICAgIFBST1BPU0FMX0FQUFJPVkFMX1BBR0VTCiAgICAvLyApLCBlcnIuSU5WQUxJRF9QUk9QT1NBTF9BUFBST1ZBTF9QUk9HUkFNX1NJWkUKICAgIGR1cAogICAgcHVzaGludCAyCiAgICA9PQogICAgYXNzZXJ0IC8vIEludmFsaWQgcHJvcG9zYWwgYXBwcm92YWwgcHJvZ3JhbSBzaXplCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTc2CiAgICAvLyBzZWxmLnByb3Bvc2FsX2FwcHJvdmFsX3Byb2dyYW0ubGVuZ3RoIC0gKHRvdGFsX3BhZ2VzIC0gMSkgKiBieXRlc19wZXJfcGFnZQogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTE2NQogICAgLy8gYnl0ZXNfcGVyX3BhZ2UgPSBVSW50NjQoQllURVNfUEVSX0FQUF9QQUdFKQogICAgaW50YyA0IC8vIDIwNDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExNzYKICAgIC8vIHNlbGYucHJvcG9zYWxfYXBwcm92YWxfcHJvZ3JhbS5sZW5ndGggLSAodG90YWxfcGFnZXMgLSAxKSAqIGJ5dGVzX3Blcl9wYWdlCiAgICAqCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExNzgKICAgIC8vIHBhZ2VfMSA9IHNlbGYucHJvcG9zYWxfYXBwcm92YWxfcHJvZ3JhbS5leHRyYWN0KAogICAgYnl0ZWMgNSAvLyAweDcwNjEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExNzkKICAgIC8vIDAgKiBieXRlc19wZXJfcGFnZSwgYnl0ZXNfcGVyX3BhZ2UKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTY1CiAgICAvLyBieXRlc19wZXJfcGFnZSA9IFVJbnQ2NChCWVRFU19QRVJfQVBQX1BBR0UpCiAgICBpbnRjIDQgLy8gMjA0OAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTE3OC0xMTgwCiAgICAvLyBwYWdlXzEgPSBzZWxmLnByb3Bvc2FsX2FwcHJvdmFsX3Byb2dyYW0uZXh0cmFjdCgKICAgIC8vICAgICAwICogYnl0ZXNfcGVyX3BhZ2UsIGJ5dGVzX3Blcl9wYWdlCiAgICAvLyApCiAgICBib3hfZXh0cmFjdAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTE4MQogICAgLy8gcGFnZV8yID0gc2VsZi5wcm9wb3NhbF9hcHByb3ZhbF9wcm9ncmFtLmV4dHJhY3QoCiAgICBieXRlYyA1IC8vIDB4NzA2MQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTE2NQogICAgLy8gYnl0ZXNfcGVyX3BhZ2UgPSBVSW50NjQoQllURVNfUEVSX0FQUF9QQUdFKQogICAgaW50YyA0IC8vIDIwNDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExODEtMTE4MwogICAgLy8gcGFnZV8yID0gc2VsZi5wcm9wb3NhbF9hcHByb3ZhbF9wcm9ncmFtLmV4dHJhY3QoCiAgICAvLyAgICAgMSAqIGJ5dGVzX3Blcl9wYWdlLCBieXRlc19sYXN0X3BhZ2UKICAgIC8vICkKICAgIHVuY292ZXIgMwogICAgYm94X2V4dHJhY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExODUtMTE5MwogICAgLy8gdHggPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIHByb3Bvc2FsX2NvbnRyYWN0LlByb3Bvc2FsLmNyZWF0ZSwKICAgIC8vICAgICBUeG4uc2VuZGVyLAogICAgLy8gICAgIGFwcHJvdmFsX3Byb2dyYW09KHBhZ2VfMSwgcGFnZV8yKSwKICAgIC8vICAgICBjbGVhcl9zdGF0ZV9wcm9ncmFtPWNvbXBpbGVkX2NsZWFyX3N0YXRlXzEsCiAgICAvLyAgICAgZ2xvYmFsX251bV91aW50PXBjZmcuR0xPQkFMX1VJTlRTLAogICAgLy8gICAgIGdsb2JhbF9udW1fYnl0ZXM9cGNmZy5HTE9CQUxfQllURVMsCiAgICAvLyAgICAgZXh0cmFfcHJvZ3JhbV9wYWdlcz10b3RhbF9wYWdlcywKICAgIC8vICkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExODcKICAgIC8vIFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICB1bmNvdmVyIDMKICAgIGl0eG5fZmllbGQgRXh0cmFQcm9ncmFtUGFnZXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExOTEKICAgIC8vIGdsb2JhbF9udW1fYnl0ZXM9cGNmZy5HTE9CQUxfQllURVMsCiAgICBwdXNoaW50IDMKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTkwCiAgICAvLyBnbG9iYWxfbnVtX3VpbnQ9cGNmZy5HTE9CQUxfVUlOVFMsCiAgICBwdXNoaW50IDI3CiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bVVpbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExNTktMTE2MwogICAgLy8gIyBjbGVhcl9zdGF0ZV9wcm9ncmFtIGlzIGEgdHVwbGUgb2YgNCBCeXRlcyBlbGVtZW50cyB3aGVyZSBlYWNoIGlzIG1heCA0MDk2IGJ5dGVzCiAgICAvLyAjIHdlIG9ubHkgdXNlIHRoZSBmaXJzdCBlbGVtZW50IGhlcmUgYXMgd2UgYXNzdW1lIHRoZSBjbGVhciBzdGF0ZSBwcm9ncmFtIGlzIHNtYWxsIGVub3VnaAogICAgLy8gY29tcGlsZWRfY2xlYXJfc3RhdGVfMSwgX2Njc18yLCBfY2NzXzMsIF9jY3NfNCA9IGNvbXBpbGVfY29udHJhY3QoCiAgICAvLyAgICAgcHJvcG9zYWxfY29udHJhY3QuUHJvcG9zYWwKICAgIC8vICkuY2xlYXJfc3RhdGVfcHJvZ3JhbQogICAgcHVzaGJ5dGVzIGJhc2U2NChDb0VCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgdW5jb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTg2CiAgICAvLyBwcm9wb3NhbF9jb250cmFjdC5Qcm9wb3NhbC5jcmVhdGUsCiAgICBwdXNoYnl0ZXMgMHhjYzY5NGVhYSAvLyBtZXRob2QgImNyZWF0ZShhZGRyZXNzKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExODUtMTE5MwogICAgLy8gdHggPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIHByb3Bvc2FsX2NvbnRyYWN0LlByb3Bvc2FsLmNyZWF0ZSwKICAgIC8vICAgICBUeG4uc2VuZGVyLAogICAgLy8gICAgIGFwcHJvdmFsX3Byb2dyYW09KHBhZ2VfMSwgcGFnZV8yKSwKICAgIC8vICAgICBjbGVhcl9zdGF0ZV9wcm9ncmFtPWNvbXBpbGVkX2NsZWFyX3N0YXRlXzEsCiAgICAvLyAgICAgZ2xvYmFsX251bV91aW50PXBjZmcuR0xPQkFMX1VJTlRTLAogICAgLy8gICAgIGdsb2JhbF9udW1fYnl0ZXM9cGNmZy5HTE9CQUxfQllURVMsCiAgICAvLyAgICAgZXh0cmFfcHJvZ3JhbV9wYWdlcz10b3RhbF9wYWdlcywKICAgIC8vICkKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTk1CiAgICAvLyBtYnJfYWZ0ZXIgPSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmJhbGFuY2UKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTE5Ny0xMjAyCiAgICAvLyAjIFRyYW5zZmVyIGZ1bmRzIHRvIHRoZSBuZXcgUHJvcG9zYWwgQXBwLCBleGNsdWRpbmcgdGhlIE1CUiBuZWVkZWQgZm9yIHRoZSBQcm9wb3NhbCBBcHAKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj10eC5jcmVhdGVkX2FwcC5hZGRyZXNzLAogICAgLy8gICAgIGFtb3VudD1zZWxmLm9wZW5fcHJvcG9zYWxfZmVlLnZhbHVlIC0gKG1icl9hZnRlciAtIG1icl9iZWZvcmUpLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTE5OQogICAgLy8gcmVjZWl2ZXI9dHguY3JlYXRlZF9hcHAuYWRkcmVzcywKICAgIGRpZyAxCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMjAwCiAgICAvLyBhbW91bnQ9c2VsZi5vcGVuX3Byb3Bvc2FsX2ZlZS52YWx1ZSAtIChtYnJfYWZ0ZXIgLSBtYnJfYmVmb3JlKSwKICAgIHN3YXAKICAgIHVuY292ZXIgMwogICAgLQogICAgdW5jb3ZlciAzCiAgICBzd2FwCiAgICAtCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTE5Ny0xMTk4CiAgICAvLyAjIFRyYW5zZmVyIGZ1bmRzIHRvIHRoZSBuZXcgUHJvcG9zYWwgQXBwLCBleGNsdWRpbmcgdGhlIE1CUiBuZWVkZWQgZm9yIHRoZSBQcm9wb3NhbCBBcHAKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIGludGNfMSAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyMDEKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTk3LTEyMDIKICAgIC8vICMgVHJhbnNmZXIgZnVuZHMgdG8gdGhlIG5ldyBQcm9wb3NhbCBBcHAsIGV4Y2x1ZGluZyB0aGUgTUJSIG5lZWRlZCBmb3IgdGhlIFByb3Bvc2FsIEFwcAogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPXR4LmNyZWF0ZWRfYXBwLmFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50PXNlbGYub3Blbl9wcm9wb3NhbF9mZWUudmFsdWUgLSAobWJyX2FmdGVyIC0gbWJyX2JlZm9yZSksCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTIwNAogICAgLy8gc2VsZi5pbmNyZW1lbnRfcGVuZGluZ19wcm9wb3NhbHMoVHhuLnNlbmRlcikKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM0MgogICAgLy8gc2VsZi5wZW5kaW5nX3Byb3Bvc2Fscy52YWx1ZSArPSAxCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAweDcwNjU2ZTY0Njk2ZTY3NWY3MDcyNmY3MDZmNzM2MTZjNzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wZW5kaW5nX3Byb3Bvc2FscyBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBieXRlYyA4IC8vIDB4NzA2NTZlNjQ2OTZlNjc1ZjcwNzI2ZjcwNmY3MzYxNmM3MwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM0MwogICAgLy8gc2VsZi5wcm9wb3Nlcl9ib3hbcHJvcG9zZXJdLmFjdGl2ZV9wcm9wb3NhbCA9IFRydWUKICAgIGJ5dGVjXzMgLy8gMHg3MAogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gMQogICAgc2V0Yml0CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgYm94X3JlcGxhY2UgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyMDkKICAgIC8vIHByb3Bvc2VyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMjEwCiAgICAvLyByb3VuZD1HbG9iYWwucm91bmQsCiAgICBnbG9iYWwgUm91bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyMDctMTIxMQogICAgLy8gdHlwLk5ld1Byb3Bvc2FsKAogICAgLy8gICAgIHByb3Bvc2FsX2lkPXR4LmNyZWF0ZWRfYXBwLmlkLAogICAgLy8gICAgIHByb3Bvc2VyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgcm91bmQ9R2xvYmFsLnJvdW5kLAogICAgLy8gKQogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBkdXAKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTIwNi0xMjEyCiAgICAvLyBhcmM0LmVtaXQoCiAgICAvLyAgICAgdHlwLk5ld1Byb3Bvc2FsKAogICAgLy8gICAgICAgICBwcm9wb3NhbF9pZD10eC5jcmVhdGVkX2FwcC5pZCwKICAgIC8vICAgICAgICAgcHJvcG9zZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICAgICAgcm91bmQ9R2xvYmFsLnJvdW5kLAogICAgLy8gICAgICkKICAgIC8vICkKICAgIHB1c2hieXRlcyAweDBkMWEwNTE5IC8vIG1ldGhvZCAiTmV3UHJvcG9zYWwodWludDY0LGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMTA3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm9wZW5fcHJvcG9zYWxfYm9vbF9mYWxzZUA0OgogICAgaW50Y18wIC8vIDAKICAgIGIgb3Blbl9wcm9wb3NhbF9ib29sX21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMueGdvdl9yZWdpc3RyeS5jb250cmFjdC5YR292UmVnaXN0cnkudm90ZV9wcm9wb3NhbFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZvdGVfcHJvcG9zYWw6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMjE2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMjQ2CiAgICAvLyBhc3NlcnQgbm90IHNlbGYucGF1c2VkX3JlZ2lzdHJ5LnZhbHVlLCBlcnIuUEFVU0VEX1JFR0lTVFJZCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAweDcwNjE3NTczNjU2NDVmNzI2NTY3Njk3Mzc0NzI3OQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnBhdXNlZF9yZWdpc3RyeSBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBSZWdpc3RyeSdzIG5vbi1hZG1pbiBtZXRob2RzIGFyZSBwYXVzZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyNDgtMTI0OQogICAgLy8gIyB2ZXJpZnkgcHJvcG9zYWxfaWQgaWQgaXMgZ2VudWluZSBwcm9wb3NhbAogICAgLy8gYXNzZXJ0IHNlbGYuX2lzX3Byb3Bvc2FsKHByb3Bvc2FsX2lkKSwgZXJyLklOVkFMSURfUFJPUE9TQUwKICAgIGRpZyAzCiAgICBjYWxsc3ViIF9pc19wcm9wb3NhbAogICAgYXNzZXJ0IC8vIEludmFsaWQgcHJvcG9zYWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIyNwogICAgLy8gcmV0dXJuIGEgaW4gc2VsZi54Z292X2JveAogICAgYnl0ZWNfMSAvLyAweDc4CiAgICBkaWcgMwogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTI1MAogICAgLy8gYXNzZXJ0IHNlbGYuaGFzX3hnb3Zfc3RhdHVzKHhnb3ZfYWRkcmVzcyksIGVyci5OT1RfWEdPVgogICAgYXNzZXJ0IC8vIE5vdCBhbiB4R292CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMjUxLTEyNTMKICAgIC8vIGFzc2VydCBzZWxmLmNhbGxlcl9pc194Z292X29yX3ZvdGluZ19hZGRyZXNzKAogICAgLy8gICAgIHhnb3ZfYWRkcmVzcwogICAgLy8gKSwgZXJyLk1VU1RfQkVfWEdPVl9PUl9WT1RJTkdfQUREUkVTUwogICAgZGlnIDMKICAgIGNhbGxzdWIgY2FsbGVyX2lzX3hnb3Zfb3Jfdm90aW5nX2FkZHJlc3MKICAgIGFzc2VydCAvLyBNdXN0IGJlIHhnb3Ygb3Igdm90aW5nIGFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyNTUtMTI1NgogICAgLy8gIyBVcG9uIHZvdGUgdGhlIGFic2VuY2UgdG9sZXJhbmNlIGlzIHJlc2V0CiAgICAvLyBzZWxmLnhnb3ZfYm94W3hnb3ZfYWRkcmVzc10udG9sZXJhdGVkX2Fic2VuY2VzID0gc2VsZi5hYnNlbmNlX3RvbGVyYW5jZS52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIyIC8vIDB4NjE2MjczNjU2ZTYzNjU1Zjc0NmY2YzY1NzI2MTZlNjM2NQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFic2VuY2VfdG9sZXJhbmNlIGV4aXN0cwogICAgaXRvYgogICAgZGlnIDEKICAgIGludGNfMiAvLyAzMgogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZSAvLyBvbiBlcnJvcjogaW5kZXggb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTI1NwogICAgLy8gc2VsZi54Z292X2JveFt4Z292X2FkZHJlc3NdLmxhc3Rfdm90ZV90aW1lc3RhbXAgPSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaXRvYgogICAgcHVzaGludCA0MAogICAgc3dhcAogICAgYm94X3JlcGxhY2UgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyNTktMTI2NgogICAgLy8gIyBDYWxsIHRoZSBQcm9wb3NhbCBBcHAgdG8gcmVnaXN0ZXIgdGhlIHZvdGUKICAgIC8vIGVycm9yLCBfdHggPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIHByb3Bvc2FsX2NvbnRyYWN0LlByb3Bvc2FsLnZvdGUsCiAgICAvLyAgICAgeGdvdl9hZGRyZXNzLAogICAgLy8gICAgIGFwcHJvdmFsX3ZvdGVzLAogICAgLy8gICAgIHJlamVjdGlvbl92b3RlcywKICAgIC8vICAgICBhcHBfaWQ9cHJvcG9zYWxfaWQsCiAgICAvLyApCiAgICBpdHhuX2JlZ2luCiAgICB1bmNvdmVyIDMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTI2MQogICAgLy8gcHJvcG9zYWxfY29udHJhY3QuUHJvcG9zYWwudm90ZSwKICAgIHB1c2hieXRlcyAweDE4NDFhMGQyIC8vIG1ldGhvZCAidm90ZShhZGRyZXNzLHVpbnQ2NCx1aW50NjQpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHVuY292ZXIgMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHN3YXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTI1OS0xMjY2CiAgICAvLyAjIENhbGwgdGhlIFByb3Bvc2FsIEFwcCB0byByZWdpc3RlciB0aGUgdm90ZQogICAgLy8gZXJyb3IsIF90eCA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgcHJvcG9zYWxfY29udHJhY3QuUHJvcG9zYWwudm90ZSwKICAgIC8vICAgICB4Z292X2FkZHJlc3MsCiAgICAvLyAgICAgYXBwcm92YWxfdm90ZXMsCiAgICAvLyAgICAgcmVqZWN0aW9uX3ZvdGVzLAogICAgLy8gICAgIGFwcF9pZD1wcm9wb3NhbF9pZCwKICAgIC8vICkKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cG4gMgogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBsb2cgdmFsdWUgaXMgbm90IHRoZSByZXN1bHQgb2YgYW4gQUJJIHJldHVybgogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHN0cmluZwogICAgZXh0cmFjdCA2IDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTI2OAogICAgLy8gaWYgZXJyb3Iuc3RhcnRzd2l0aChlcnIuQVJDXzY1X1BSRUZJWCk6CiAgICBsZW4KICAgIGR1cAogICAgcHVzaGludCA0CiAgICA8CiAgICBieiB2b3RlX3Byb3Bvc2FsX3Rlcm5hcnlfZmFsc2VANAogICAgdW5jb3ZlciAyCiAgICBwb3AKICAgIGludGNfMCAvLyAwCgp2b3RlX3Byb3Bvc2FsX3Rlcm5hcnlfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyNjgKICAgIC8vIGlmIGVycm9yLnN0YXJ0c3dpdGgoZXJyLkFSQ182NV9QUkVGSVgpOgogICAgYnogdm90ZV9wcm9wb3NhbF9lbHNlX2JvZHlAMTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyNjkKICAgIC8vIGVycm9yX3dpdGhvdXRfcHJlZml4ID0gU3RyaW5nLmZyb21fYnl0ZXMoZXJyb3IuYnl0ZXNbNDpdKQogICAgcHVzaGludCA0CiAgICBkaWcgMQogICAgPj0KICAgIHB1c2hpbnQgNAogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBzd2FwCiAgICBzdWJzdHJpbmczCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMjcxCiAgICAvLyBjYXNlIGVyci5XUk9OR19QUk9QT1NBTF9TVEFUVVM6CiAgICBieXRlYyAxMyAvLyAiV3JvbmcgUHJvcG9zYWwgU3RhdHVzIG9yIGZpbmFsaXplZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyNzMKICAgIC8vIGNhc2UgZXJyLlZPVEVSX05PVF9GT1VORDoKICAgIGJ5dGVjIDU0IC8vICJWb3RlciBub3QgZm91bmQiCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMjc1CiAgICAvLyBjYXNlIGVyci5WT1RFU19JTlZBTElEOgogICAgcHVzaGJ5dGVzcyAiVm90ZXMgaW52YWxpZCIgIlZvdGluZyBQZXJpb2QgRXhwaXJlZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyNzAtMTI4MAogICAgLy8gbWF0Y2ggZXJyb3Jfd2l0aG91dF9wcmVmaXg6CiAgICAvLyAgICAgY2FzZSBlcnIuV1JPTkdfUFJPUE9TQUxfU1RBVFVTOgogICAgLy8gICAgICAgICBvcC5lcnIoZXJyLldST05HX1BST1BPU0FMX1NUQVRVUykKICAgIC8vICAgICBjYXNlIGVyci5WT1RFUl9OT1RfRk9VTkQ6CiAgICAvLyAgICAgICAgIG9wLmVycihlcnIuVk9URVJfTk9UX0ZPVU5EKQogICAgLy8gICAgIGNhc2UgZXJyLlZPVEVTX0lOVkFMSUQ6CiAgICAvLyAgICAgICAgIG9wLmVycihlcnIuVk9URVNfSU5WQUxJRCkKICAgIC8vICAgICBjYXNlIGVyci5WT1RJTkdfUEVSSU9EX0VYUElSRUQ6CiAgICAvLyAgICAgICAgIG9wLmVycihlcnIuVk9USU5HX1BFUklPRF9FWFBJUkVEKQogICAgLy8gICAgIGNhc2UgXzoKICAgIC8vICAgICAgICAgb3AuZXJyKCJVbmtub3duIGVycm9yIikKICAgIHVuY292ZXIgNAogICAgbWF0Y2ggdm90ZV9wcm9wb3NhbF9zd2l0Y2hfY2FzZV8wQDcgdm90ZV9wcm9wb3NhbF9zd2l0Y2hfY2FzZV8xQDggdm90ZV9wcm9wb3NhbF9zd2l0Y2hfY2FzZV8yQDkgdm90ZV9wcm9wb3NhbF9zd2l0Y2hfY2FzZV8zQDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMjgwCiAgICAvLyBvcC5lcnIoIlVua25vd24gZXJyb3IiKQogICAgZXJyIC8vIFVua25vd24gZXJyb3IKCnZvdGVfcHJvcG9zYWxfc3dpdGNoX2Nhc2VfM0AxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyNzgKICAgIC8vIG9wLmVycihlcnIuVk9USU5HX1BFUklPRF9FWFBJUkVEKQogICAgZXJyIC8vIFZvdGluZyBQZXJpb2QgRXhwaXJlZAoKdm90ZV9wcm9wb3NhbF9zd2l0Y2hfY2FzZV8yQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMjc2CiAgICAvLyBvcC5lcnIoZXJyLlZPVEVTX0lOVkFMSUQpCiAgICBlcnIgLy8gVm90ZXMgaW52YWxpZAoKdm90ZV9wcm9wb3NhbF9zd2l0Y2hfY2FzZV8xQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMjc0CiAgICAvLyBvcC5lcnIoZXJyLlZPVEVSX05PVF9GT1VORCkKICAgIGVyciAvLyBWb3RlciBub3QgZm91bmQKCnZvdGVfcHJvcG9zYWxfc3dpdGNoX2Nhc2VfMEA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTI3MgogICAgLy8gb3AuZXJyKGVyci5XUk9OR19QUk9QT1NBTF9TVEFUVVMpCiAgICBlcnIgLy8gV3JvbmcgUHJvcG9zYWwgU3RhdHVzIG9yIGZpbmFsaXplZAoKdm90ZV9wcm9wb3NhbF9lbHNlX2JvZHlAMTI6CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyODIKICAgIC8vIGFzc2VydCBlcnJvciA9PSAiIiwgIlVua25vd24gZXJyb3IiCiAgICBwdXNoYnl0ZXMgIiIKICAgID09CiAgICBhc3NlcnQgLy8gVW5rbm93biBlcnJvcgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTIxNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCnZvdGVfcHJvcG9zYWxfdGVybmFyeV9mYWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTI2OAogICAgLy8gaWYgZXJyb3Iuc3RhcnRzd2l0aChlcnIuQVJDXzY1X1BSRUZJWCk6CiAgICB1bmNvdmVyIDIKICAgIGV4dHJhY3QgNiA0CiAgICBieXRlYyAxNCAvLyAiRVJSOiIKICAgID09CiAgICBiIHZvdGVfcHJvcG9zYWxfdGVybmFyeV9tZXJnZUA1CgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LnVuYXNzaWduX2Fic2VudGVlX2Zyb21fcHJvcG9zYWxbcm91dGluZ10oKSAtPiB2b2lkOgp1bmFzc2lnbl9hYnNlbnRlZV9mcm9tX3Byb3Bvc2FsOgogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTI4NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBjb3ZlciAzCiAgICBpbnRjXzIgLy8gMzIKICAgICoKICAgIHB1c2hpbnQgMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFjY291bnQ+CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMzAxCiAgICAvLyBhc3NlcnQgbm90IHNlbGYucGF1c2VkX3JlZ2lzdHJ5LnZhbHVlLCBlcnIuUEFVU0VEX1JFR0lTVFJZCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAweDcwNjE3NTczNjU2NDVmNzI2NTY3Njk3Mzc0NzI3OQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnBhdXNlZF9yZWdpc3RyeSBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBSZWdpc3RyeSdzIG5vbi1hZG1pbiBtZXRob2RzIGFyZSBwYXVzZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzMDMtMTMwNAogICAgLy8gIyBWZXJpZnkgcHJvcG9zYWxfaWQgaXMgYSBnZW51aW5lIHByb3Bvc2FsIGNyZWF0ZWQgYnkgdGhpcyByZWdpc3RyeQogICAgLy8gYXNzZXJ0IHNlbGYuX2lzX3Byb3Bvc2FsKHByb3Bvc2FsX2lkKSwgZXJyLklOVkFMSURfUFJPUE9TQUwKICAgIGRpZyAxCiAgICBjYWxsc3ViIF9pc19wcm9wb3NhbAogICAgYXNzZXJ0IC8vIEludmFsaWQgcHJvcG9zYWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzMDYtMTMxMwogICAgLy8gIyBUaGUgYFByb3Bvc2FsLnVuYXNzaWduX2Fic2VudGVlc2AgY2FsbCBndWFyYW50ZWVzIHRoYXQ6CiAgICAvLyAjIC0gQW55IGFic2VudGVlIGluIHRoZSBhcnJheSBpcyByZWFsbHkgYXNzaWduZWQgdG8gdGhlIFByb3Bvc2FsOwogICAgLy8gIyAtIE5vIGFic2VudGVlIGlzIGR1cGxpY2F0ZWQgaW4gdGhlIGFycmF5LgogICAgLy8gZXJyb3IsIF90eCA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgcHJvcG9zYWxfY29udHJhY3QuUHJvcG9zYWwudW5hc3NpZ25fYWJzZW50ZWVzLAogICAgLy8gICAgIGFic2VudGVlcywKICAgIC8vICAgICBhcHBfaWQ9cHJvcG9zYWxfaWQsCiAgICAvLyApCiAgICBpdHhuX2JlZ2luCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzMTAKICAgIC8vIHByb3Bvc2FsX2NvbnRyYWN0LlByb3Bvc2FsLnVuYXNzaWduX2Fic2VudGVlcywKICAgIHB1c2hieXRlcyAweDc2ZmY0YzcwIC8vIG1ldGhvZCAidW5hc3NpZ25fYWJzZW50ZWVzKGFkZHJlc3NbXSlzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzMDYtMTMxMwogICAgLy8gIyBUaGUgYFByb3Bvc2FsLnVuYXNzaWduX2Fic2VudGVlc2AgY2FsbCBndWFyYW50ZWVzIHRoYXQ6CiAgICAvLyAjIC0gQW55IGFic2VudGVlIGluIHRoZSBhcnJheSBpcyByZWFsbHkgYXNzaWduZWQgdG8gdGhlIFByb3Bvc2FsOwogICAgLy8gIyAtIE5vIGFic2VudGVlIGlzIGR1cGxpY2F0ZWQgaW4gdGhlIGFycmF5LgogICAgLy8gZXJyb3IsIF90eCA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgcHJvcG9zYWxfY29udHJhY3QuUHJvcG9zYWwudW5hc3NpZ25fYWJzZW50ZWVzLAogICAgLy8gICAgIGFic2VudGVlcywKICAgIC8vICAgICBhcHBfaWQ9cHJvcG9zYWxfaWQsCiAgICAvLyApCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXBuIDIKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gbG9nIHZhbHVlIGlzIG5vdCB0aGUgcmVzdWx0IG9mIGFuIEFCSSByZXR1cm4KICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBzdHJpbmcKICAgIGV4dHJhY3QgNiAwCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzMTUKICAgIC8vIGlmIGVycm9yLnN0YXJ0c3dpdGgoZXJyLkFSQ182NV9QUkVGSVgpOgogICAgbGVuCiAgICBkdXAKICAgIHB1c2hpbnQgNAogICAgPAogICAgYnogdW5hc3NpZ25fYWJzZW50ZWVfZnJvbV9wcm9wb3NhbF90ZXJuYXJ5X2ZhbHNlQDQKICAgIHVuY292ZXIgMgogICAgcG9wCiAgICBpbnRjXzAgLy8gMAoKdW5hc3NpZ25fYWJzZW50ZWVfZnJvbV9wcm9wb3NhbF90ZXJuYXJ5X21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMzE1CiAgICAvLyBpZiBlcnJvci5zdGFydHN3aXRoKGVyci5BUkNfNjVfUFJFRklYKToKICAgIGJ6IHVuYXNzaWduX2Fic2VudGVlX2Zyb21fcHJvcG9zYWxfZWxzZV9ib2R5QDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMzE2CiAgICAvLyBlcnJvcl93aXRob3V0X3ByZWZpeCA9IFN0cmluZy5mcm9tX2J5dGVzKGVycm9yLmJ5dGVzWzQ6XSkKICAgIHB1c2hpbnQgNAogICAgZGlnIDEKICAgID49CiAgICBwdXNoaW50IDQKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgc3dhcAogICAgc3Vic3RyaW5nMwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTMxOAogICAgLy8gY2FzZSBlcnIuV1JPTkdfUFJPUE9TQUxfU1RBVFVTOgogICAgYnl0ZWMgMTMgLy8gIldyb25nIFByb3Bvc2FsIFN0YXR1cyBvciBmaW5hbGl6ZWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMzIwCiAgICAvLyBjYXNlIGVyci5WT1RFUl9OT1RfRk9VTkQ6CiAgICBieXRlYyA1NCAvLyAiVm90ZXIgbm90IGZvdW5kIgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTMxNy0xMzIzCiAgICAvLyBtYXRjaCBlcnJvcl93aXRob3V0X3ByZWZpeDoKICAgIC8vICAgICBjYXNlIGVyci5XUk9OR19QUk9QT1NBTF9TVEFUVVM6CiAgICAvLyAgICAgICAgIG9wLmVycihlcnIuV1JPTkdfUFJPUE9TQUxfU1RBVFVTKQogICAgLy8gICAgIGNhc2UgZXJyLlZPVEVSX05PVF9GT1VORDoKICAgIC8vICAgICAgICAgb3AuZXJyKGVyci5WT1RFUl9OT1RfRk9VTkQpCiAgICAvLyAgICAgY2FzZSBfOgogICAgLy8gICAgICAgICBvcC5lcnIoIlVua25vd24gZXJyb3IiKQogICAgdW5jb3ZlciAyCiAgICBtYXRjaCB1bmFzc2lnbl9hYnNlbnRlZV9mcm9tX3Byb3Bvc2FsX3N3aXRjaF9jYXNlXzBANyB1bmFzc2lnbl9hYnNlbnRlZV9mcm9tX3Byb3Bvc2FsX3N3aXRjaF9jYXNlXzFAOAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTMyMwogICAgLy8gb3AuZXJyKCJVbmtub3duIGVycm9yIikKICAgIGVyciAvLyBVbmtub3duIGVycm9yCgp1bmFzc2lnbl9hYnNlbnRlZV9mcm9tX3Byb3Bvc2FsX3N3aXRjaF9jYXNlXzFAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzMjEKICAgIC8vIG9wLmVycihlcnIuVk9URVJfTk9UX0ZPVU5EKQogICAgZXJyIC8vIFZvdGVyIG5vdCBmb3VuZAoKdW5hc3NpZ25fYWJzZW50ZWVfZnJvbV9wcm9wb3NhbF9zd2l0Y2hfY2FzZV8wQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMzE5CiAgICAvLyBvcC5lcnIoZXJyLldST05HX1BST1BPU0FMX1NUQVRVUykKICAgIGVyciAvLyBXcm9uZyBQcm9wb3NhbCBTdGF0dXMgb3IgZmluYWxpemVkCgp1bmFzc2lnbl9hYnNlbnRlZV9mcm9tX3Byb3Bvc2FsX2Vsc2VfYm9keUAxMDoKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTMyNQogICAgLy8gYXNzZXJ0IGVycm9yID09ICIiLCAiVW5rbm93biBlcnJvciIKICAgIHB1c2hieXRlcyAiIgogICAgPT0KICAgIGFzc2VydCAvLyBVbmtub3duIGVycm9yCiAgICBpbnRjXzAgLy8gMAoKdW5hc3NpZ25fYWJzZW50ZWVfZnJvbV9wcm9wb3NhbF9mb3JfaGVhZGVyQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTMyNy0xMzMxCiAgICAvLyAjIOKaoO+4jyBXQVJOSU5HOiBUaGUgYWJzZW50ZWVzIGFycmF5OgogICAgLy8gIyAtIE1VU1QgaGF2ZSBvbmx5IGFic2VudGVlcyByZWFsbHkvc3RpbGwgYXNzaWduZWQgdG8gdGhlIFByb3Bvc2FsCiAgICAvLyAjIC0gTVVTVCBOT1QgaGF2ZSBkdXBsaWNhdGVzCiAgICAvLyAjIHdoaWNoIGlzIGd1YXJhbnRlZWQgYnkgdGhlIHByZXZpb3VzIEFCSSBjYWxsLgogICAgLy8gZm9yIGFic2VudGVlIGluIGFic2VudGVlczoKICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIGJ6IHVuYXNzaWduX2Fic2VudGVlX2Zyb21fcHJvcG9zYWxfYWZ0ZXJfZm9yQDIwCiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gMzIKICAgICoKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGJ1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjI3CiAgICAvLyByZXR1cm4gYSBpbiBzZWxmLnhnb3ZfYm94CiAgICBieXRlY18xIC8vIDB4NzgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBidXJ5IDUKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTMzNC0xMzM1CiAgICAvLyBzZWxmLmhhc194Z292X3N0YXR1cyhhYnNlbnRlZSkKICAgIC8vIGFuZCBzZWxmLnhnb3ZfYm94W2Fic2VudGVlXS50b2xlcmF0ZWRfYWJzZW5jZXMgPiAwCiAgICBieiB1bmFzc2lnbl9hYnNlbnRlZV9mcm9tX3Byb3Bvc2FsX2FmdGVyX2lmX2Vsc2VAMTgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzMzUKICAgIC8vIGFuZCBzZWxmLnhnb3ZfYm94W2Fic2VudGVlXS50b2xlcmF0ZWRfYWJzZW5jZXMgPiAwCiAgICBkaWcgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYueGdvdl9ib3ggZW50cnkgZXhpc3RzCiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMzM0LTEzMzUKICAgIC8vIHNlbGYuaGFzX3hnb3Zfc3RhdHVzKGFic2VudGVlKQogICAgLy8gYW5kIHNlbGYueGdvdl9ib3hbYWJzZW50ZWVdLnRvbGVyYXRlZF9hYnNlbmNlcyA+IDAKICAgIGJ6IHVuYXNzaWduX2Fic2VudGVlX2Zyb21fcHJvcG9zYWxfYWZ0ZXJfaWZfZWxzZUAxOAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTMzNwogICAgLy8gc2VsZi54Z292X2JveFthYnNlbnRlZV0udG9sZXJhdGVkX2Fic2VuY2VzIC09IDEKICAgIGRpZyAzCiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnhnb3ZfYm94IGVudHJ5IGV4aXN0cwogICAgaW50Y18yIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGl0b2IKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gMzIKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzMzgKICAgIC8vIGlmIHNlbGYueGdvdl9ib3hbYWJzZW50ZWVdLnRvbGVyYXRlZF9hYnNlbmNlcyA9PSAwOgogICAgYm94X2dldAogICAgcG9wCiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICBibnogdW5hc3NpZ25fYWJzZW50ZWVfZnJvbV9wcm9wb3NhbF9hZnRlcl9pZl9lbHNlQDE4CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMzM5CiAgICAvLyBzZWxmLnVuc3Vic2NyaWJlX3hnb3ZfYW5kX2VtaXQoYWJzZW50ZWUpCiAgICBkaWcgNAogICAgY2FsbHN1YiB1bnN1YnNjcmliZV94Z292X2FuZF9lbWl0Cgp1bmFzc2lnbl9hYnNlbnRlZV9mcm9tX3Byb3Bvc2FsX2FmdGVyX2lmX2Vsc2VAMTg6CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYiB1bmFzc2lnbl9hYnNlbnRlZV9mcm9tX3Byb3Bvc2FsX2Zvcl9oZWFkZXJAMTIKCnVuYXNzaWduX2Fic2VudGVlX2Zyb21fcHJvcG9zYWxfYWZ0ZXJfZm9yQDIwOgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTI4NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCnVuYXNzaWduX2Fic2VudGVlX2Zyb21fcHJvcG9zYWxfdGVybmFyeV9mYWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTMxNQogICAgLy8gaWYgZXJyb3Iuc3RhcnRzd2l0aChlcnIuQVJDXzY1X1BSRUZJWCk6CiAgICB1bmNvdmVyIDIKICAgIGV4dHJhY3QgNiA0CiAgICBieXRlYyAxNCAvLyAiRVJSOiIKICAgID09CiAgICBiIHVuYXNzaWduX2Fic2VudGVlX2Zyb21fcHJvcG9zYWxfdGVybmFyeV9tZXJnZUA1CgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LnBheV9ncmFudF9wcm9wb3NhbFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnBheV9ncmFudF9wcm9wb3NhbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzNDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMzU5LTEzNjAKICAgIC8vICMgVmVyaWZ5IHRoZSBjYWxsZXIgaXMgdGhlIHhHb3YgUGF5b3IKICAgIC8vIGFzc2VydCBzZWxmLmlzX3hnb3ZfcGF5b3IoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgY2FsbHN1YiBpc194Z292X3BheW9yCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMzYyLTEzNjMKICAgIC8vICMgVmVyaWZ5IHByb3Bvc2FsX2lkIGlzIGEgZ2VudWluZSBwcm9wb3NhbCBjcmVhdGVkIGJ5IHRoaXMgcmVnaXN0cnkKICAgIC8vIGFzc2VydCBzZWxmLl9pc19wcm9wb3NhbChwcm9wb3NhbF9pZCksIGVyci5JTlZBTElEX1BST1BPU0FMCiAgICBkdXAKICAgIGNhbGxzdWIgX2lzX3Byb3Bvc2FsCiAgICBhc3NlcnQgLy8gSW52YWxpZCBwcm9wb3NhbAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTM2NS0xMzY2CiAgICAvLyAjIFJlYWQgcHJvcG9zYWwgc3RhdGUgZGlyZWN0bHkgZnJvbSB0aGUgUHJvcG9zYWwgQXBwJ3MgZ2xvYmFsIHN0YXRlCiAgICAvLyBwcm9wb3NlciA9IHNlbGYuZ2V0X3Byb3Bvc2FsX3Byb3Bvc2VyKHByb3Bvc2FsX2lkKQogICAgZHVwCiAgICBjYWxsc3ViIGdldF9wcm9wb3NhbF9wcm9wb3NlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjUxLTI1MwogICAgLy8gcmVxdWVzdGVkX2Ftb3VudCwgcmVxdWVzdGVkX2Ftb3VudF9leGlzdHMgPSBvcC5BcHBHbG9iYWwuZ2V0X2V4X3VpbnQ2NCgKICAgIC8vICAgICBwcm9wb3NhbCwgcGNmZy5HU19LRVlfUkVRVUVTVEVEX0FNT1VOVAogICAgLy8gKQogICAgZGlnIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI1MgogICAgLy8gcHJvcG9zYWwsIHBjZmcuR1NfS0VZX1JFUVVFU1RFRF9BTU9VTlQKICAgIHB1c2hieXRlcyAweDcyNjU3MTc1NjU3Mzc0NjU2NDVmNjE2ZDZmNzU2ZTc0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyNTEtMjUzCiAgICAvLyByZXF1ZXN0ZWRfYW1vdW50LCByZXF1ZXN0ZWRfYW1vdW50X2V4aXN0cyA9IG9wLkFwcEdsb2JhbC5nZXRfZXhfdWludDY0KAogICAgLy8gICAgIHByb3Bvc2FsLCBwY2ZnLkdTX0tFWV9SRVFVRVNURURfQU1PVU5UCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjU0CiAgICAvLyBhc3NlcnQgcmVxdWVzdGVkX2Ftb3VudF9leGlzdHMsIGVyci5NSVNTSU5HX0tFWQogICAgYXNzZXJ0IC8vIE1pc3Npbmcga2V5IGluIHN0YXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMzY5CiAgICAvLyBhc3NlcnQgcHJvcG9zZXIgaW4gc2VsZi5wcm9wb3Nlcl9ib3gsIGVyci5XUk9OR19QUk9QT1NFUgogICAgYnl0ZWNfMyAvLyAweDcwCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBXcm9uZyBwcm9wb3NlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTM3MQogICAgLy8gYXNzZXJ0IHNlbGYudmFsaWRfa3ljKHByb3Bvc2VyKSwgZXJyLklOVkFMSURfS1lDCiAgICBkaWcgMQogICAgY2FsbHN1YiB2YWxpZF9reWMKICAgIGFzc2VydCAvLyBJbnZhbGlkIEtZQwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTM3NQogICAgLy8gc2VsZi5vdXRzdGFuZGluZ19mdW5kcy52YWx1ZSA+PSByZXF1ZXN0ZWRfYW1vdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAweDZmNzU3NDczNzQ2MTZlNjQ2OTZlNjc1ZjY2NzU2ZTY0NzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vdXRzdGFuZGluZ19mdW5kcyBleGlzdHMKICAgIGR1cAogICAgZGlnIDIKICAgID49CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMzczLTEzNzYKICAgIC8vICMgVmVyaWZ5IHN1ZmZpY2llbnQgZnVuZHMgYXJlIGF2YWlsYWJsZQogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZWxmLm91dHN0YW5kaW5nX2Z1bmRzLnZhbHVlID49IHJlcXVlc3RlZF9hbW91bnQKICAgIC8vICksIGVyci5JTlNVRkZJQ0lFTlRfVFJFQVNVUllfRlVORFMKICAgIGFzc2VydCAvLyBJbnN1ZmZpY2llbnQgdHJlYXN1cnkgZnVuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI2Ny0yNjgKICAgIC8vICMgVHJhbnNmZXIgdGhlIGZ1bmRzIHRvIHRoZSByZWNlaXZlcgogICAgLy8gaXR4bi5QYXltZW50KHJlY2VpdmVyPXJlY2lwaWVudCwgYW1vdW50PWFtb3VudCwgZmVlPTApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIHVuY292ZXIgMgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjcwLTI3MQogICAgLy8gIyBVcGRhdGUgdGhlIG91dHN0YW5kaW5nIGZ1bmRzCiAgICAvLyBzZWxmLm91dHN0YW5kaW5nX2Z1bmRzLnZhbHVlIC09IGFtb3VudAogICAgc3dhcAogICAgLQogICAgYnl0ZWMgNCAvLyAweDZmNzU3NDczNzQ2MTZlNjQ2OTZlNjc1ZjY2NzU2ZTY0NzMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMzgwCiAgICAvLyBlcnJvciwgX3R4ID0gYXJjNC5hYmlfY2FsbChwcm9wb3NhbF9jb250cmFjdC5Qcm9wb3NhbC5mdW5kLCBhcHBfaWQ9cHJvcG9zYWxfaWQpCiAgICBpdHhuX2JlZ2luCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hieXRlcyAweDhhNWU0YzgwIC8vIG1ldGhvZCAiZnVuZCgpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cG4gMgogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBsb2cgdmFsdWUgaXMgbm90IHRoZSByZXN1bHQgb2YgYW4gQUJJIHJldHVybgogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHN0cmluZwogICAgZXh0cmFjdCA2IDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTM4MgogICAgLy8gaWYgZXJyb3Iuc3RhcnRzd2l0aChlcnIuQVJDXzY1X1BSRUZJWCk6CiAgICBsZW4KICAgIGR1cAogICAgcHVzaGludCA0CiAgICA8CiAgICBieiBwYXlfZ3JhbnRfcHJvcG9zYWxfdGVybmFyeV9mYWxzZUA0CiAgICB1bmNvdmVyIDIKICAgIHBvcAogICAgaW50Y18wIC8vIDAKCnBheV9ncmFudF9wcm9wb3NhbF90ZXJuYXJ5X21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMzgyCiAgICAvLyBpZiBlcnJvci5zdGFydHN3aXRoKGVyci5BUkNfNjVfUFJFRklYKToKICAgIGJ6IHBheV9ncmFudF9wcm9wb3NhbF9lbHNlX2JvZHlAOQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTM4MwogICAgLy8gZXJyb3Jfd2l0aG91dF9wcmVmaXggPSBTdHJpbmcuZnJvbV9ieXRlcyhlcnJvci5ieXRlc1s0Ol0pCiAgICBwdXNoaW50IDQKICAgIGRpZyAxCiAgICA+PQogICAgcHVzaGludCA0CiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHN3YXAKICAgIHN1YnN0cmluZzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzODUKICAgIC8vIGNhc2UgZXJyLldST05HX1BST1BPU0FMX1NUQVRVUzoKICAgIGJ5dGVjIDEzIC8vICJXcm9uZyBQcm9wb3NhbCBTdGF0dXMgb3IgZmluYWxpemVkIgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTM4NC0xMzg4CiAgICAvLyBtYXRjaCBlcnJvcl93aXRob3V0X3ByZWZpeDoKICAgIC8vICAgICBjYXNlIGVyci5XUk9OR19QUk9QT1NBTF9TVEFUVVM6CiAgICAvLyAgICAgICAgIG9wLmVycihlcnIuV1JPTkdfUFJPUE9TQUxfU1RBVFVTKQogICAgLy8gICAgIGNhc2UgXzoKICAgIC8vICAgICAgICAgb3AuZXJyKCJVbmtub3duIGVycm9yIikKICAgIHN3YXAKICAgIG1hdGNoIHBheV9ncmFudF9wcm9wb3NhbF9zd2l0Y2hfY2FzZV8wQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzODgKICAgIC8vIG9wLmVycigiVW5rbm93biBlcnJvciIpCiAgICBlcnIgLy8gVW5rbm93biBlcnJvcgoKcGF5X2dyYW50X3Byb3Bvc2FsX3N3aXRjaF9jYXNlXzBANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzODYKICAgIC8vIG9wLmVycihlcnIuV1JPTkdfUFJPUE9TQUxfU1RBVFVTKQogICAgZXJyIC8vIFdyb25nIFByb3Bvc2FsIFN0YXR1cyBvciBmaW5hbGl6ZWQKCnBheV9ncmFudF9wcm9wb3NhbF9lbHNlX2JvZHlAOToKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTM5MAogICAgLy8gYXNzZXJ0IGVycm9yID09ICIiLCAiVW5rbm93biBlcnJvciIKICAgIHB1c2hieXRlcyAiIgogICAgPT0KICAgIGFzc2VydCAvLyBVbmtub3duIGVycm9yCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMzQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKcGF5X2dyYW50X3Byb3Bvc2FsX3Rlcm5hcnlfZmFsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzODIKICAgIC8vIGlmIGVycm9yLnN0YXJ0c3dpdGgoZXJyLkFSQ182NV9QUkVGSVgpOgogICAgdW5jb3ZlciAyCiAgICBleHRyYWN0IDYgNAogICAgYnl0ZWMgMTQgLy8gIkVSUjoiCiAgICA9PQogICAgYiBwYXlfZ3JhbnRfcHJvcG9zYWxfdGVybmFyeV9tZXJnZUA1CgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LmZpbmFsaXplX3Byb3Bvc2FsW3JvdXRpbmddKCkgLT4gdm9pZDoKZmluYWxpemVfcHJvcG9zYWw6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxMzkyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyMzkKICAgIC8vIHN0YXR1cywgc3RhdHVzX2V4aXN0cyA9IG9wLkFwcEdsb2JhbC5nZXRfZXhfdWludDY0KHByb3Bvc2FsLCBwY2ZnLkdTX0tFWV9TVEFUVVMpCiAgICBwdXNoYnl0ZXMgMHg3Mzc0NjE3NDc1NzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI0MAogICAgLy8gYXNzZXJ0IHN0YXR1c19leGlzdHMsIGVyci5NSVNTSU5HX0tFWQogICAgYXNzZXJ0IC8vIE1pc3Npbmcga2V5IGluIHN0YXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNDA4LTE0MTAKICAgIC8vIGlmIHByb3Bvc2FsX3N0YXR1cyA9PSBVSW50NjQocGVubS5TVEFUVVNfRU1QVFkpIG9yIHByb3Bvc2FsX3N0YXR1cyA9PSBVSW50NjQoCiAgICAvLyAgICAgcGVubS5TVEFUVVNfRFJBRlQKICAgIC8vICk6CiAgICBieiBmaW5hbGl6ZV9wcm9wb3NhbF9pZl9ib2R5QDMKICAgIGRpZyAxCiAgICBwdXNoaW50IDEwCiAgICA9PQogICAgYnogZmluYWxpemVfcHJvcG9zYWxfYWZ0ZXJfaWZfZWxzZUA0CgpmaW5hbGl6ZV9wcm9wb3NhbF9pZl9ib2R5QDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNDExCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLnhnb3ZfZGFlbW9uLnZhbHVlLCBlcnIuVU5BVVRIT1JJWkVECiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTggLy8gMHg3ODY3NmY3NjVmNjQ2MTY1NmQ2ZjZlCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYueGdvdl9kYWVtb24gZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZAoKZmluYWxpemVfcHJvcG9zYWxfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQxMy0xNDE0CiAgICAvLyAjIFZlcmlmeSBwcm9wb3NhbF9pZCBpcyBhIGdlbnVpbmUgcHJvcG9zYWwgY3JlYXRlZCBieSB0aGlzIHJlZ2lzdHJ5CiAgICAvLyBhc3NlcnQgc2VsZi5faXNfcHJvcG9zYWwocHJvcG9zYWxfaWQpLCBlcnIuSU5WQUxJRF9QUk9QT1NBTAogICAgZHVwbiAyCiAgICBjYWxsc3ViIF9pc19wcm9wb3NhbAogICAgYXNzZXJ0IC8vIEludmFsaWQgcHJvcG9zYWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE0MTYtMTQxOAogICAgLy8gZXJyb3IsIF90eCA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgcHJvcG9zYWxfY29udHJhY3QuUHJvcG9zYWwuZmluYWxpemUsIGFwcF9pZD1wcm9wb3NhbF9pZAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNDE3CiAgICAvLyBwcm9wb3NhbF9jb250cmFjdC5Qcm9wb3NhbC5maW5hbGl6ZSwgYXBwX2lkPXByb3Bvc2FsX2lkCiAgICBwdXNoYnl0ZXMgMHg4MDIwNjliNCAvLyBtZXRob2QgImZpbmFsaXplKClzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQxNi0xNDE4CiAgICAvLyBlcnJvciwgX3R4ID0gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBwcm9wb3NhbF9jb250cmFjdC5Qcm9wb3NhbC5maW5hbGl6ZSwgYXBwX2lkPXByb3Bvc2FsX2lkCiAgICAvLyApCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBsb2cgdmFsdWUgaXMgbm90IHRoZSByZXN1bHQgb2YgYW4gQUJJIHJldHVybgogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHN0cmluZwogICAgZXh0cmFjdCA2IDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQyMAogICAgLy8gaWYgZXJyb3Iuc3RhcnRzd2l0aChlcnIuQVJDXzY1X1BSRUZJWCk6CiAgICBsZW4KICAgIGR1cAogICAgcHVzaGludCA0CiAgICA8CiAgICBieiBmaW5hbGl6ZV9wcm9wb3NhbF90ZXJuYXJ5X2ZhbHNlQDcKICAgIHVuY292ZXIgMwogICAgcG9wCiAgICBpbnRjXzAgLy8gMAoKZmluYWxpemVfcHJvcG9zYWxfdGVybmFyeV9tZXJnZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQyMAogICAgLy8gaWYgZXJyb3Iuc3RhcnRzd2l0aChlcnIuQVJDXzY1X1BSRUZJWCk6CiAgICBieiBmaW5hbGl6ZV9wcm9wb3NhbF9lbHNlX2JvZHlAMTMKICAgIHVuY292ZXIgMgogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNDIxCiAgICAvLyBlcnJvcl93aXRob3V0X3ByZWZpeCA9IFN0cmluZy5mcm9tX2J5dGVzKGVycm9yLmJ5dGVzWzQ6XSkKICAgIHB1c2hpbnQgNAogICAgZGlnIDEKICAgID49CiAgICBwdXNoaW50IDQKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgc3dhcAogICAgc3Vic3RyaW5nMwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQyMwogICAgLy8gY2FzZSBlcnIuV1JPTkdfUFJPUE9TQUxfU1RBVFVTOgogICAgYnl0ZWMgMTMgLy8gIldyb25nIFByb3Bvc2FsIFN0YXR1cyBvciBmaW5hbGl6ZWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNDI1CiAgICAvLyBjYXNlIGVyci5WT1RFUlNfQVNTSUdORUQ6CiAgICBwdXNoYnl0ZXMgIlRoZXJlIGFyZSB2b3RlcnMgYXNzaWduZWQgdG8gdGhpcyBwcm9wb3NhbCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE0MjItMTQyOAogICAgLy8gbWF0Y2ggZXJyb3Jfd2l0aG91dF9wcmVmaXg6CiAgICAvLyAgICAgY2FzZSBlcnIuV1JPTkdfUFJPUE9TQUxfU1RBVFVTOgogICAgLy8gICAgICAgICBvcC5lcnIoZXJyLldST05HX1BST1BPU0FMX1NUQVRVUykKICAgIC8vICAgICBjYXNlIGVyci5WT1RFUlNfQVNTSUdORUQ6CiAgICAvLyAgICAgICAgIG9wLmVycihlcnIuVk9URVJTX0FTU0lHTkVEKQogICAgLy8gICAgIGNhc2UgXzoKICAgIC8vICAgICAgICAgb3AuZXJyKCJVbmtub3duIGVycm9yIikKICAgIHVuY292ZXIgMgogICAgbWF0Y2ggZmluYWxpemVfcHJvcG9zYWxfc3dpdGNoX2Nhc2VfMEAxMCBmaW5hbGl6ZV9wcm9wb3NhbF9zd2l0Y2hfY2FzZV8xQDExCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNDI4CiAgICAvLyBvcC5lcnIoIlVua25vd24gZXJyb3IiKQogICAgZXJyIC8vIFVua25vd24gZXJyb3IKCmZpbmFsaXplX3Byb3Bvc2FsX3N3aXRjaF9jYXNlXzFAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNDI2CiAgICAvLyBvcC5lcnIoZXJyLlZPVEVSU19BU1NJR05FRCkKICAgIGVyciAvLyBUaGVyZSBhcmUgdm90ZXJzIGFzc2lnbmVkIHRvIHRoaXMgcHJvcG9zYWwKCmZpbmFsaXplX3Byb3Bvc2FsX3N3aXRjaF9jYXNlXzBAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNDI0CiAgICAvLyBvcC5lcnIoZXJyLldST05HX1BST1BPU0FMX1NUQVRVUykKICAgIGVyciAvLyBXcm9uZyBQcm9wb3NhbCBTdGF0dXMgb3IgZmluYWxpemVkCgpmaW5hbGl6ZV9wcm9wb3NhbF9lbHNlX2JvZHlAMTM6CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE0MzAKICAgIC8vIGFzc2VydCBlcnJvciA9PSAiIiwgIlVua25vd24gZXJyb3IiCiAgICBwdXNoYnl0ZXMgIiIKICAgID09CiAgICBhc3NlcnQgLy8gVW5rbm93biBlcnJvcgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQzMgogICAgLy8gc2VsZi5kZWNyZW1lbnRfcGVuZGluZ19wcm9wb3NhbHMocHJvcG9zYWxfaWQpCiAgICBjYWxsc3ViIGRlY3JlbWVudF9wZW5kaW5nX3Byb3Bvc2FscwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTM5MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmZpbmFsaXplX3Byb3Bvc2FsX3Rlcm5hcnlfZmFsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE0MjAKICAgIC8vIGlmIGVycm9yLnN0YXJ0c3dpdGgoZXJyLkFSQ182NV9QUkVGSVgpOgogICAgdW5jb3ZlciAzCiAgICBleHRyYWN0IDYgNAogICAgYnl0ZWMgMTQgLy8gIkVSUjoiCiAgICA9PQogICAgYiBmaW5hbGl6ZV9wcm9wb3NhbF90ZXJuYXJ5X21lcmdlQDgKCgovLyBzbWFydF9jb250cmFjdHMueGdvdl9yZWdpc3RyeS5jb250cmFjdC5YR292UmVnaXN0cnkuZHJvcF9wcm9wb3NhbFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRyb3BfcHJvcG9zYWw6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNDM0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNDQ5CiAgICAvLyBhc3NlcnQgbm90IHNlbGYucGF1c2VkX3JlZ2lzdHJ5LnZhbHVlLCBlcnIuUEFVU0VEX1JFR0lTVFJZCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAweDcwNjE3NTczNjU2NDVmNzI2NTY3Njk3Mzc0NzI3OQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnBhdXNlZF9yZWdpc3RyeSBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBSZWdpc3RyeSdzIG5vbi1hZG1pbiBtZXRob2RzIGFyZSBwYXVzZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE0NTEtMTQ1MgogICAgLy8gIyBWZXJpZnkgcHJvcG9zYWxfaWQgaXMgYSBnZW51aW5lIHByb3Bvc2FsIGNyZWF0ZWQgYnkgdGhpcyByZWdpc3RyeQogICAgLy8gYXNzZXJ0IHNlbGYuX2lzX3Byb3Bvc2FsKHByb3Bvc2FsX2lkKSwgZXJyLklOVkFMSURfUFJPUE9TQUwKICAgIGR1cAogICAgY2FsbHN1YiBfaXNfcHJvcG9zYWwKICAgIGFzc2VydCAvLyBJbnZhbGlkIHByb3Bvc2FsCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNDU0CiAgICAvLyBwcm9wb3NlciA9IHNlbGYuZ2V0X3Byb3Bvc2FsX3Byb3Bvc2VyKHByb3Bvc2FsX2lkKQogICAgZHVwCiAgICBjYWxsc3ViIGdldF9wcm9wb3NhbF9wcm9wb3NlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQ1NQogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gcHJvcG9zZXIsIGVyci5VTkFVVEhPUklaRUQKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNDU3CiAgICAvLyBlcnJvciwgX3R4ID0gYXJjNC5hYmlfY2FsbChwcm9wb3NhbF9jb250cmFjdC5Qcm9wb3NhbC5kcm9wLCBhcHBfaWQ9cHJvcG9zYWxfaWQpCiAgICBpdHhuX2JlZ2luCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hieXRlcyAweDczNzEzMjFhIC8vIG1ldGhvZCAiZHJvcCgpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cG4gMgogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBsb2cgdmFsdWUgaXMgbm90IHRoZSByZXN1bHQgb2YgYW4gQUJJIHJldHVybgogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHN0cmluZwogICAgZXh0cmFjdCA2IDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQ1OQogICAgLy8gaWYgZXJyb3Iuc3RhcnRzd2l0aChlcnIuQVJDXzY1X1BSRUZJWCk6CiAgICBsZW4KICAgIGR1cAogICAgcHVzaGludCA0CiAgICA8CiAgICBieiBkcm9wX3Byb3Bvc2FsX3Rlcm5hcnlfZmFsc2VANAogICAgdW5jb3ZlciAyCiAgICBwb3AKICAgIGludGNfMCAvLyAwCgpkcm9wX3Byb3Bvc2FsX3Rlcm5hcnlfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE0NTkKICAgIC8vIGlmIGVycm9yLnN0YXJ0c3dpdGgoZXJyLkFSQ182NV9QUkVGSVgpOgogICAgYnogZHJvcF9wcm9wb3NhbF9lbHNlX2JvZHlAOQogICAgdW5jb3ZlciAyCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE0NjAKICAgIC8vIGVycm9yX3dpdGhvdXRfcHJlZml4ID0gU3RyaW5nLmZyb21fYnl0ZXMoZXJyb3IuYnl0ZXNbNDpdKQogICAgcHVzaGludCA0CiAgICBkaWcgMQogICAgPj0KICAgIHB1c2hpbnQgNAogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBzd2FwCiAgICBzdWJzdHJpbmczCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNDYyCiAgICAvLyBjYXNlIGVyci5XUk9OR19QUk9QT1NBTF9TVEFUVVM6CiAgICBieXRlYyAxMyAvLyAiV3JvbmcgUHJvcG9zYWwgU3RhdHVzIG9yIGZpbmFsaXplZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE0NjEtMTQ2NQogICAgLy8gbWF0Y2ggZXJyb3Jfd2l0aG91dF9wcmVmaXg6CiAgICAvLyAgICAgY2FzZSBlcnIuV1JPTkdfUFJPUE9TQUxfU1RBVFVTOgogICAgLy8gICAgICAgICBvcC5lcnIoZXJyLldST05HX1BST1BPU0FMX1NUQVRVUykKICAgIC8vICAgICBjYXNlIF86CiAgICAvLyAgICAgICAgIG9wLmVycigiVW5rbm93biBlcnJvciIpCiAgICBzd2FwCiAgICBtYXRjaCBkcm9wX3Byb3Bvc2FsX3N3aXRjaF9jYXNlXzBANwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQ2NQogICAgLy8gb3AuZXJyKCJVbmtub3duIGVycm9yIikKICAgIGVyciAvLyBVbmtub3duIGVycm9yCgpkcm9wX3Byb3Bvc2FsX3N3aXRjaF9jYXNlXzBANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE0NjMKICAgIC8vIG9wLmVycihlcnIuV1JPTkdfUFJPUE9TQUxfU1RBVFVTKQogICAgZXJyIC8vIFdyb25nIFByb3Bvc2FsIFN0YXR1cyBvciBmaW5hbGl6ZWQKCmRyb3BfcHJvcG9zYWxfZWxzZV9ib2R5QDk6CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE0NjcKICAgIC8vIGFzc2VydCBlcnJvciA9PSAiIiwgIlVua25vd24gZXJyb3IiCiAgICBwdXNoYnl0ZXMgIiIKICAgID09CiAgICBhc3NlcnQgLy8gVW5rbm93biBlcnJvcgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQ2OQogICAgLy8gc2VsZi5kZWNyZW1lbnRfcGVuZGluZ19wcm9wb3NhbHMocHJvcG9zYWxfaWQpCiAgICBjYWxsc3ViIGRlY3JlbWVudF9wZW5kaW5nX3Byb3Bvc2FscwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQzNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmRyb3BfcHJvcG9zYWxfdGVybmFyeV9mYWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQ1OQogICAgLy8gaWYgZXJyb3Iuc3RhcnRzd2l0aChlcnIuQVJDXzY1X1BSRUZJWCk6CiAgICB1bmNvdmVyIDIKICAgIGV4dHJhY3QgNiA0CiAgICBieXRlYyAxNCAvLyAiRVJSOiIKICAgID09CiAgICBiIGRyb3BfcHJvcG9zYWxfdGVybmFyeV9tZXJnZUA1CgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LmRlcG9zaXRfZnVuZHNbcm91dGluZ10oKSAtPiB2b2lkOgpkZXBvc2l0X2Z1bmRzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQ3MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQ4NAogICAgLy8gcGF5bWVudC5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE0ODMtMTQ4NQogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBwYXltZW50LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIC8vICksIGVyci5XUk9OR19SRUNFSVZFUgogICAgYXNzZXJ0IC8vIFdyb25nIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNDg2CiAgICAvLyBzZWxmLm91dHN0YW5kaW5nX2Z1bmRzLnZhbHVlICs9IHBheW1lbnQuYW1vdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAweDZmNzU3NDczNzQ2MTZlNjQ2OTZlNjc1ZjY2NzU2ZTY0NzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vdXRzdGFuZGluZ19mdW5kcyBleGlzdHMKICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgKwogICAgYnl0ZWMgNCAvLyAweDZmNzU3NDczNzQ2MTZlNjQ2OTZlNjc1ZjY2NzU2ZTY0NzMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNDcxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy54Z292X3JlZ2lzdHJ5LmNvbnRyYWN0LlhHb3ZSZWdpc3RyeS53aXRoZHJhd19mdW5kc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CndpdGhkcmF3X2Z1bmRzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTQ4OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1MDIKICAgIC8vIGFzc2VydCBzZWxmLmlzX3hnb3ZfbWFuYWdlcigpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBjYWxsc3ViIGlzX3hnb3ZfbWFuYWdlcgogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTUwMwogICAgLy8gYXNzZXJ0IGFtb3VudCA8PSBzZWxmLm91dHN0YW5kaW5nX2Z1bmRzLnZhbHVlLCBlcnIuSU5TVUZGSUNJRU5UX0ZVTkRTCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAweDZmNzU3NDczNzQ2MTZlNjQ2OTZlNjc1ZjY2NzU2ZTY0NzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vdXRzdGFuZGluZ19mdW5kcyBleGlzdHMKICAgIGR1cDIKICAgIDw9CiAgICBhc3NlcnQgLy8gSW5zdWZmaWNpZW50IGZ1bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTA0CiAgICAvLyBhc3NlcnQgVHhuLmZlZSA+PSAoR2xvYmFsLm1pbl90eG5fZmVlICogMiksIGVyci5JTlNVRkZJQ0lFTlRfRkVFCiAgICB0eG4gRmVlCiAgICBnbG9iYWwgTWluVHhuRmVlCiAgICBwdXNoaW50IDIKICAgICoKICAgID49CiAgICBhc3NlcnQgLy8gSW5zdWZmaWNpZW50IGZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTUwNQogICAgLy8gc2VsZi5vdXRzdGFuZGluZ19mdW5kcy52YWx1ZSAtPSBhbW91bnQKICAgIGRpZyAxCiAgICAtCiAgICBieXRlYyA0IC8vIDB4NmY3NTc0NzM3NDYxNmU2NDY5NmU2NzVmNjY3NTZlNjQ3MwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1MDctMTUxMQogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPXNlbGYueGdvdl9tYW5hZ2VyLnZhbHVlLAogICAgLy8gICAgIGFtb3VudD1hbW91bnQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTA4CiAgICAvLyByZWNlaXZlcj1zZWxmLnhnb3ZfbWFuYWdlci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA3IC8vIDB4Nzg2NzZmNzY1ZjZkNjE2ZTYxNjc2NTcyCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYueGdvdl9tYW5hZ2VyIGV4aXN0cwogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1MDcKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIGludGNfMSAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1MTAKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTA3LTE1MTEKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1zZWxmLnhnb3ZfbWFuYWdlci52YWx1ZSwKICAgIC8vICAgICBhbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE0ODgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LndpdGhkcmF3X2F2YWlsYWJsZV9mdW5kc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CndpdGhkcmF3X2F2YWlsYWJsZV9mdW5kczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1MTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTI3CiAgICAvLyBhc3NlcnQgc2VsZi5pc194Z292X3BheW9yKCksIGVyci5VTkFVVEhPUklaRUQKICAgIGNhbGxzdWIgaXNfeGdvdl9wYXlvcgogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTUyOAogICAgLy8gYXNzZXJ0IFR4bi5mZWUgPj0gKEdsb2JhbC5taW5fdHhuX2ZlZSAqIDIpLCBlcnIuSU5TVUZGSUNJRU5UX0ZFRQogICAgdHhuIEZlZQogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgcHVzaGludCAyCiAgICAqCiAgICA+PQogICAgYXNzZXJ0IC8vIEluc3VmZmljaWVudCBmZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1MjkKICAgIC8vIGFzc2VydCBhbW91bnQgPD0gc2VsZi5jb21wdXRlX2F2YWlsYWJsZV9mdW5kcygpLCBlcnIuSU5TVUZGSUNJRU5UX0ZVTkRTCiAgICBjYWxsc3ViIGNvbXB1dGVfYXZhaWxhYmxlX2Z1bmRzCiAgICBkaWcgMQogICAgPj0KICAgIGFzc2VydCAvLyBJbnN1ZmZpY2llbnQgZnVuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1MzAtMTUzNAogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPXNlbGYueGdvdl9wYXlvci52YWx1ZSwKICAgIC8vICAgICBhbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTUzMQogICAgLy8gcmVjZWl2ZXI9c2VsZi54Z292X3BheW9yLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDkgLy8gMHg3ODY3NmY3NjVmNzA2MTc5NmY3MgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnhnb3ZfcGF5b3IgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTUzMAogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTUzMwogICAgLy8gZmVlPTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1MzAtMTUzNAogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPXNlbGYueGdvdl9wYXlvci52YWx1ZSwKICAgIC8vICAgICBhbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1MTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LmdldF9hdmFpbGFibGVfZnVuZHNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfYXZhaWxhYmxlX2Z1bmRzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTU0NwogICAgLy8gcmV0dXJuIHNlbGYuY29tcHV0ZV9hdmFpbGFibGVfZnVuZHMoKQogICAgY2FsbHN1YiBjb21wdXRlX2F2YWlsYWJsZV9mdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTUzNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBpdG9iCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LmdldF9zdGF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9zdGF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1NTYKICAgIC8vIHBhdXNlZF9yZWdpc3RyeT1zZWxmLnBhdXNlZF9yZWdpc3RyeS52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vIDB4NzA2MTc1NzM2NTY0NWY3MjY1Njc2OTczNzQ3Mjc5CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucGF1c2VkX3JlZ2lzdHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTU1NwogICAgLy8gcGF1c2VkX3Byb3Bvc2Fscz1zZWxmLnBhdXNlZF9wcm9wb3NhbHMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gMHg3MDYxNzU3MzY1NjQ1ZjcwNzI2ZjcwNmY3MzYxNmM3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnBhdXNlZF9wcm9wb3NhbHMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTU4CiAgICAvLyB4Z292X21hbmFnZXI9c2VsZi54Z292X21hbmFnZXIudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAweDc4Njc2Zjc2NWY2ZDYxNmU2MTY3NjU3MgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnhnb3ZfbWFuYWdlciBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1NTkKICAgIC8vIHhnb3ZfcGF5b3I9c2VsZi54Z292X3BheW9yLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDkgLy8gMHg3ODY3NmY3NjVmNzA2MTc5NmY3MgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnhnb3ZfcGF5b3IgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTYwCiAgICAvLyB4Z292X2NvdW5jaWw9c2VsZi54Z292X2NvdW5jaWwudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjUgLy8gMHg3ODY3NmY3NjVmNjM2Zjc1NmU2MzY5NmMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi54Z292X2NvdW5jaWwgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTYxCiAgICAvLyB4Z292X3N1YnNjcmliZXI9c2VsZi54Z292X3N1YnNjcmliZXIudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTUgLy8gMHg3ODY3NmY3NjVmNzM3NTYyNzM2MzcyNjk2MjY1NzIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi54Z292X3N1YnNjcmliZXIgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTYyCiAgICAvLyBreWNfcHJvdmlkZXI9c2VsZi5reWNfcHJvdmlkZXIudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTYgLy8gMHg2Yjc5NjM1ZjcwNzI2Zjc2Njk2NDY1NzIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5reWNfcHJvdmlkZXIgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTYzCiAgICAvLyBjb21taXR0ZWVfbWFuYWdlcj1zZWxmLmNvbW1pdHRlZV9tYW5hZ2VyLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE3IC8vIDB4NjM2ZjZkNmQ2OTc0NzQ2NTY1NWY2ZDYxNmU2MTY3NjU3MgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNvbW1pdHRlZV9tYW5hZ2VyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTU2NAogICAgLy8geGdvdl9kYWVtb249c2VsZi54Z292X2RhZW1vbi52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxOCAvLyAweDc4Njc2Zjc2NWY2NDYxNjU2ZDZmNmUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi54Z292X2RhZW1vbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1NjUKICAgIC8vIHhnb3ZfZmVlPXNlbGYueGdvdl9mZWUudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTkgLy8gMHg3ODY3NmY3NjVmNjY2NTY1CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYueGdvdl9mZWUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTY2CiAgICAvLyBwcm9wb3Nlcl9mZWU9c2VsZi5wcm9wb3Nlcl9mZWUudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjAgLy8gMHg3MDcyNmY3MDZmNzM2NTcyNWY2NjY1NjUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcm9wb3Nlcl9mZWUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTY3CiAgICAvLyBvcGVuX3Byb3Bvc2FsX2ZlZT1zZWxmLm9wZW5fcHJvcG9zYWxfZmVlLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIxIC8vIDB4NmY3MDY1NmU1ZjcwNzI2ZjcwNmY3MzYxNmM1ZjY2NjU2NQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm9wZW5fcHJvcG9zYWxfZmVlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTU2OAogICAgLy8gZGFlbW9uX29wc19mdW5kaW5nX2Jwcz1zZWxmLmRhZW1vbl9vcHNfZnVuZGluZ19icHMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjYgLy8gMHg2NDYxNjU2ZDZmNmU1ZjZmNzA2NTcyNjE3NDY5NmY2ZTVmNjY3NTZlNjQ2OTZlNjc1ZjYyNzA3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRhZW1vbl9vcHNfZnVuZGluZ19icHMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTY5CiAgICAvLyBwcm9wb3NhbF9jb21taXRtZW50X2Jwcz1zZWxmLnByb3Bvc2FsX2NvbW1pdG1lbnRfYnBzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDI3IC8vIDB4NzA3MjZmNzA2ZjczNjE2YzVmNjM2ZjZkNmQ2OTc0NmQ2NTZlNzQ1ZjYyNzA3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnByb3Bvc2FsX2NvbW1pdG1lbnRfYnBzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTU3MAogICAgLy8gbWluX3JlcXVlc3RlZF9hbW91bnQ9c2VsZi5taW5fcmVxdWVzdGVkX2Ftb3VudC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyOCAvLyAweDZkNjk2ZTVmNzI2NTcxNzU2NTczNzQ2NTY0NWY2MTZkNmY3NTZlNzQKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5taW5fcmVxdWVzdGVkX2Ftb3VudCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1NzMKICAgIC8vIHNlbGYubWF4X3JlcXVlc3RlZF9hbW91bnRfc21hbGwudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjkgLy8gMHg2ZDYxNzg1ZjcyNjU3MTc1NjU3Mzc0NjU2NDVmNjE2ZDZmNzU2ZTc0NWY3MzZkNjE2YzZjCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWF4X3JlcXVlc3RlZF9hbW91bnRfc21hbGwgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTc0CiAgICAvLyBzZWxmLm1heF9yZXF1ZXN0ZWRfYW1vdW50X21lZGl1bS52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAzMCAvLyAweDZkNjE3ODVmNzI2NTcxNzU2NTczNzQ2NTY0NWY2MTZkNmY3NTZlNzQ1ZjZkNjU2NDY5NzU2ZAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1heF9yZXF1ZXN0ZWRfYW1vdW50X21lZGl1bSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1NzUKICAgIC8vIHNlbGYubWF4X3JlcXVlc3RlZF9hbW91bnRfbGFyZ2UudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMzEgLy8gMHg2ZDYxNzg1ZjcyNjU3MTc1NjU3Mzc0NjU2NDVmNjE2ZDZmNzU2ZTc0NWY2YzYxNzI2NzY1CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWF4X3JlcXVlc3RlZF9hbW91bnRfbGFyZ2UgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTcxLTE1NzcKICAgIC8vIG1heF9yZXF1ZXN0ZWRfYW1vdW50PUZpeGVkQXJyYXkoCiAgICAvLyAgICAgKAogICAgLy8gICAgICAgICBzZWxmLm1heF9yZXF1ZXN0ZWRfYW1vdW50X3NtYWxsLnZhbHVlLAogICAgLy8gICAgICAgICBzZWxmLm1heF9yZXF1ZXN0ZWRfYW1vdW50X21lZGl1bS52YWx1ZSwKICAgIC8vICAgICAgICAgc2VsZi5tYXhfcmVxdWVzdGVkX2Ftb3VudF9sYXJnZS52YWx1ZSwKICAgIC8vICAgICApCiAgICAvLyApLAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTgwCiAgICAvLyBzZWxmLmRpc2N1c3Npb25fZHVyYXRpb25fc21hbGwudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMzIgLy8gMHg2NDY5NzM2Mzc1NzM3MzY5NmY2ZTVmNjQ3NTcyNjE3NDY5NmY2ZTVmNzM2ZDYxNmM2YwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRpc2N1c3Npb25fZHVyYXRpb25fc21hbGwgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTgxCiAgICAvLyBzZWxmLmRpc2N1c3Npb25fZHVyYXRpb25fbWVkaXVtLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDMzIC8vIDB4NjQ2OTczNjM3NTczNzM2OTZmNmU1ZjY0NzU3MjYxNzQ2OTZmNmU1ZjZkNjU2NDY5NzU2ZAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRpc2N1c3Npb25fZHVyYXRpb25fbWVkaXVtIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTU4MgogICAgLy8gc2VsZi5kaXNjdXNzaW9uX2R1cmF0aW9uX2xhcmdlLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDM0IC8vIDB4NjQ2OTczNjM3NTczNzM2OTZmNmU1ZjY0NzU3MjYxNzQ2OTZmNmU1ZjZjNjE3MjY3NjUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kaXNjdXNzaW9uX2R1cmF0aW9uX2xhcmdlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTU4MwogICAgLy8gc2VsZi5kaXNjdXNzaW9uX2R1cmF0aW9uX3hsYXJnZS52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAzNSAvLyAweDY0Njk3MzYzNzU3MzczNjk2ZjZlNWY2NDc1NzI2MTc0Njk2ZjZlNWY3ODZjNjE3MjY3NjUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kaXNjdXNzaW9uX2R1cmF0aW9uX3hsYXJnZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1NzgtMTU4NQogICAgLy8gZGlzY3Vzc2lvbl9kdXJhdGlvbj1GaXhlZEFycmF5KAogICAgLy8gICAgICgKICAgIC8vICAgICAgICAgc2VsZi5kaXNjdXNzaW9uX2R1cmF0aW9uX3NtYWxsLnZhbHVlLAogICAgLy8gICAgICAgICBzZWxmLmRpc2N1c3Npb25fZHVyYXRpb25fbWVkaXVtLnZhbHVlLAogICAgLy8gICAgICAgICBzZWxmLmRpc2N1c3Npb25fZHVyYXRpb25fbGFyZ2UudmFsdWUsCiAgICAvLyAgICAgICAgIHNlbGYuZGlzY3Vzc2lvbl9kdXJhdGlvbl94bGFyZ2UudmFsdWUsCiAgICAvLyAgICAgKQogICAgLy8gKSwKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1ODgKICAgIC8vIHNlbGYudm90aW5nX2R1cmF0aW9uX3NtYWxsLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDM2IC8vIDB4NzY2Zjc0Njk2ZTY3NWY2NDc1NzI2MTc0Njk2ZjZlNWY3MzZkNjE2YzZjCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudm90aW5nX2R1cmF0aW9uX3NtYWxsIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTU4OQogICAgLy8gc2VsZi52b3RpbmdfZHVyYXRpb25fbWVkaXVtLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDM3IC8vIDB4NzY2Zjc0Njk2ZTY3NWY2NDc1NzI2MTc0Njk2ZjZlNWY2ZDY1NjQ2OTc1NmQKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi52b3RpbmdfZHVyYXRpb25fbWVkaXVtIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTU5MAogICAgLy8gc2VsZi52b3RpbmdfZHVyYXRpb25fbGFyZ2UudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMzggLy8gMHg3NjZmNzQ2OTZlNjc1ZjY0NzU3MjYxNzQ2OTZmNmU1ZjZjNjE3MjY3NjUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi52b3RpbmdfZHVyYXRpb25fbGFyZ2UgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTkxCiAgICAvLyBzZWxmLnZvdGluZ19kdXJhdGlvbl94bGFyZ2UudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMzkgLy8gMHg3NjZmNzQ2OTZlNjc1ZjY0NzU3MjYxNzQ2OTZmNmU1Zjc4NmM2MTcyNjc2NQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnZvdGluZ19kdXJhdGlvbl94bGFyZ2UgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTg2LTE1OTMKICAgIC8vIHZvdGluZ19kdXJhdGlvbj1GaXhlZEFycmF5KAogICAgLy8gICAgICgKICAgIC8vICAgICAgICAgc2VsZi52b3RpbmdfZHVyYXRpb25fc21hbGwudmFsdWUsCiAgICAvLyAgICAgICAgIHNlbGYudm90aW5nX2R1cmF0aW9uX21lZGl1bS52YWx1ZSwKICAgIC8vICAgICAgICAgc2VsZi52b3RpbmdfZHVyYXRpb25fbGFyZ2UudmFsdWUsCiAgICAvLyAgICAgICAgIHNlbGYudm90aW5nX2R1cmF0aW9uX3hsYXJnZS52YWx1ZSwKICAgIC8vICAgICApCiAgICAvLyApLAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTU5NgogICAgLy8gc2VsZi5xdW9ydW1fc21hbGwudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNDAgLy8gMHg3MTc1NmY3Mjc1NmQ1ZjczNmQ2MTZjNmMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5xdW9ydW1fc21hbGwgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTk3CiAgICAvLyBzZWxmLnF1b3J1bV9tZWRpdW0udmFsdWUsICAjIE5vIGxvbmdlciB1c2VkCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNDEgLy8gMHg3MTc1NmY3Mjc1NmQ1ZjZkNjU2NDY5NzU2ZAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnF1b3J1bV9tZWRpdW0gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTk4CiAgICAvLyBzZWxmLnF1b3J1bV9sYXJnZS52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0MiAvLyAweDcxNzU2ZjcyNzU2ZDVmNmM2MTcyNjc2NQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnF1b3J1bV9sYXJnZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1OTQtMTYwMAogICAgLy8gcXVvcnVtPUZpeGVkQXJyYXkoCiAgICAvLyAgICAgKAogICAgLy8gICAgICAgICBzZWxmLnF1b3J1bV9zbWFsbC52YWx1ZSwKICAgIC8vICAgICAgICAgc2VsZi5xdW9ydW1fbWVkaXVtLnZhbHVlLCAgIyBObyBsb25nZXIgdXNlZAogICAgLy8gICAgICAgICBzZWxmLnF1b3J1bV9sYXJnZS52YWx1ZSwKICAgIC8vICAgICApCiAgICAvLyApLAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNjAzCiAgICAvLyBzZWxmLndlaWdodGVkX3F1b3J1bV9zbWFsbC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0MyAvLyAweDc3NjU2OTY3Njg3NDY1NjQ1ZjcxNzU2ZjcyNzU2ZDVmNzM2ZDYxNmM2YwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLndlaWdodGVkX3F1b3J1bV9zbWFsbCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE2MDQKICAgIC8vIHNlbGYud2VpZ2h0ZWRfcXVvcnVtX21lZGl1bS52YWx1ZSwgICMgTm8gbG9uZ2VyIHVzZWQKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0NCAvLyAweDc3NjU2OTY3Njg3NDY1NjQ1ZjcxNzU2ZjcyNzU2ZDVmNmQ2NTY0Njk3NTZkCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYud2VpZ2h0ZWRfcXVvcnVtX21lZGl1bSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE2MDUKICAgIC8vIHNlbGYud2VpZ2h0ZWRfcXVvcnVtX2xhcmdlLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQ1IC8vIDB4Nzc2NTY5Njc2ODc0NjU2NDVmNzE3NTZmNzI3NTZkNWY2YzYxNzI2NzY1CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYud2VpZ2h0ZWRfcXVvcnVtX2xhcmdlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTYwMS0xNjA3CiAgICAvLyB3ZWlnaHRlZF9xdW9ydW09Rml4ZWRBcnJheSgKICAgIC8vICAgICAoCiAgICAvLyAgICAgICAgIHNlbGYud2VpZ2h0ZWRfcXVvcnVtX3NtYWxsLnZhbHVlLAogICAgLy8gICAgICAgICBzZWxmLndlaWdodGVkX3F1b3J1bV9tZWRpdW0udmFsdWUsICAjIE5vIGxvbmdlciB1c2VkCiAgICAvLyAgICAgICAgIHNlbGYud2VpZ2h0ZWRfcXVvcnVtX2xhcmdlLnZhbHVlLAogICAgLy8gICAgICkKICAgIC8vICksCiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE2MDgKICAgIC8vIG91dHN0YW5kaW5nX2Z1bmRzPXNlbGYub3V0c3RhbmRpbmdfZnVuZHMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAweDZmNzU3NDczNzQ2MTZlNjQ2OTZlNjc1ZjY2NzU2ZTY0NzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vdXRzdGFuZGluZ19mdW5kcyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE2MDkKICAgIC8vIHBlbmRpbmdfcHJvcG9zYWxzPXNlbGYucGVuZGluZ19wcm9wb3NhbHMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAweDcwNjU2ZTY0Njk2ZTY3NWY3MDcyNmY3MDZmNzM2MTZjNzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wZW5kaW5nX3Byb3Bvc2FscyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE2MTAKICAgIC8vIGNvbW1pdHRlZV9pZD1zZWxmLmNvbW1pdHRlZV9pZC52YWx1ZS5jb3B5KCksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNTMgLy8gMHg2MzZmNmQ2ZDY5NzQ3NDY1NjU1ZjY5NjQKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jb21taXR0ZWVfaWQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNjExCiAgICAvLyBjb21taXR0ZWVfbWVtYmVycz1zZWxmLmNvbW1pdHRlZV9tZW1iZXJzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQ2IC8vIDB4NjM2ZjZkNmQ2OTc0NzQ2NTY1NWY2ZDY1NmQ2MjY1NzI3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNvbW1pdHRlZV9tZW1iZXJzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTYxMgogICAgLy8gY29tbWl0dGVlX3ZvdGVzPXNlbGYuY29tbWl0dGVlX3ZvdGVzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQ3IC8vIDB4NjM2ZjZkNmQ2OTc0NzQ2NTY1NWY3NjZmNzQ2NTczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY29tbWl0dGVlX3ZvdGVzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTYxMwogICAgLy8gYWJzZW5jZV90b2xlcmFuY2U9c2VsZi5hYnNlbmNlX3RvbGVyYW5jZS52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMiAvLyAweDYxNjI3MzY1NmU2MzY1NWY3NDZmNmM2NTcyNjE2ZTYzNjUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hYnNlbmNlX3RvbGVyYW5jZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE2MTQKICAgIC8vIGdvdmVybmFuY2VfcGVyaW9kPXNlbGYuZ292ZXJuYW5jZV9wZXJpb2QudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNDkgLy8gMHg2NzZmNzY2NTcyNmU2MTZlNjM2NTVmNzA2NTcyNjk2ZjY0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ292ZXJuYW5jZV9wZXJpb2QgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNjE1CiAgICAvLyBjb21taXR0ZWVfZ3JhY2VfcGVyaW9kPXNlbGYuY29tbWl0dGVlX2dyYWNlX3BlcmlvZC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1MCAvLyAweDYzNmY2ZDZkNjk3NDc0NjU2NTVmNjc3MjYxNjM2NTVmNzA2NTcyNjk2ZjY0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY29tbWl0dGVlX2dyYWNlX3BlcmlvZCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE2MTYKICAgIC8vIGNvbW1pdHRlZV9sYXN0X2FuY2hvcj1zZWxmLmNvbW1pdHRlZV9sYXN0X2FuY2hvci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1MSAvLyAweDYzNmY2ZDZkNjk3NDc0NjU2NTVmNmM2MTczNzQ1ZjYxNmU2MzY4NmY3MgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNvbW1pdHRlZV9sYXN0X2FuY2hvciBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1NTUtMTYxNwogICAgLy8gcmV0dXJuIHR5cC5UeXBlZEdsb2JhbFN0YXRlKAogICAgLy8gICAgIHBhdXNlZF9yZWdpc3RyeT1zZWxmLnBhdXNlZF9yZWdpc3RyeS52YWx1ZSwKICAgIC8vICAgICBwYXVzZWRfcHJvcG9zYWxzPXNlbGYucGF1c2VkX3Byb3Bvc2Fscy52YWx1ZSwKICAgIC8vICAgICB4Z292X21hbmFnZXI9c2VsZi54Z292X21hbmFnZXIudmFsdWUsCiAgICAvLyAgICAgeGdvdl9wYXlvcj1zZWxmLnhnb3ZfcGF5b3IudmFsdWUsCiAgICAvLyAgICAgeGdvdl9jb3VuY2lsPXNlbGYueGdvdl9jb3VuY2lsLnZhbHVlLAogICAgLy8gICAgIHhnb3Zfc3Vic2NyaWJlcj1zZWxmLnhnb3Zfc3Vic2NyaWJlci52YWx1ZSwKICAgIC8vICAgICBreWNfcHJvdmlkZXI9c2VsZi5reWNfcHJvdmlkZXIudmFsdWUsCiAgICAvLyAgICAgY29tbWl0dGVlX21hbmFnZXI9c2VsZi5jb21taXR0ZWVfbWFuYWdlci52YWx1ZSwKICAgIC8vICAgICB4Z292X2RhZW1vbj1zZWxmLnhnb3ZfZGFlbW9uLnZhbHVlLAogICAgLy8gICAgIHhnb3ZfZmVlPXNlbGYueGdvdl9mZWUudmFsdWUsCiAgICAvLyAgICAgcHJvcG9zZXJfZmVlPXNlbGYucHJvcG9zZXJfZmVlLnZhbHVlLAogICAgLy8gICAgIG9wZW5fcHJvcG9zYWxfZmVlPXNlbGYub3Blbl9wcm9wb3NhbF9mZWUudmFsdWUsCiAgICAvLyAgICAgZGFlbW9uX29wc19mdW5kaW5nX2Jwcz1zZWxmLmRhZW1vbl9vcHNfZnVuZGluZ19icHMudmFsdWUsCiAgICAvLyAgICAgcHJvcG9zYWxfY29tbWl0bWVudF9icHM9c2VsZi5wcm9wb3NhbF9jb21taXRtZW50X2Jwcy52YWx1ZSwKICAgIC8vICAgICBtaW5fcmVxdWVzdGVkX2Ftb3VudD1zZWxmLm1pbl9yZXF1ZXN0ZWRfYW1vdW50LnZhbHVlLAogICAgLy8gICAgIG1heF9yZXF1ZXN0ZWRfYW1vdW50PUZpeGVkQXJyYXkoCiAgICAvLyAgICAgICAgICgKICAgIC8vICAgICAgICAgICAgIHNlbGYubWF4X3JlcXVlc3RlZF9hbW91bnRfc21hbGwudmFsdWUsCiAgICAvLyAgICAgICAgICAgICBzZWxmLm1heF9yZXF1ZXN0ZWRfYW1vdW50X21lZGl1bS52YWx1ZSwKICAgIC8vICAgICAgICAgICAgIHNlbGYubWF4X3JlcXVlc3RlZF9hbW91bnRfbGFyZ2UudmFsdWUsCiAgICAvLyAgICAgICAgICkKICAgIC8vICAgICApLAogICAgLy8gICAgIGRpc2N1c3Npb25fZHVyYXRpb249Rml4ZWRBcnJheSgKICAgIC8vICAgICAgICAgKAogICAgLy8gICAgICAgICAgICAgc2VsZi5kaXNjdXNzaW9uX2R1cmF0aW9uX3NtYWxsLnZhbHVlLAogICAgLy8gICAgICAgICAgICAgc2VsZi5kaXNjdXNzaW9uX2R1cmF0aW9uX21lZGl1bS52YWx1ZSwKICAgIC8vICAgICAgICAgICAgIHNlbGYuZGlzY3Vzc2lvbl9kdXJhdGlvbl9sYXJnZS52YWx1ZSwKICAgIC8vICAgICAgICAgICAgIHNlbGYuZGlzY3Vzc2lvbl9kdXJhdGlvbl94bGFyZ2UudmFsdWUsCiAgICAvLyAgICAgICAgICkKICAgIC8vICAgICApLAogICAgLy8gICAgIHZvdGluZ19kdXJhdGlvbj1GaXhlZEFycmF5KAogICAgLy8gICAgICAgICAoCiAgICAvLyAgICAgICAgICAgICBzZWxmLnZvdGluZ19kdXJhdGlvbl9zbWFsbC52YWx1ZSwKICAgIC8vICAgICAgICAgICAgIHNlbGYudm90aW5nX2R1cmF0aW9uX21lZGl1bS52YWx1ZSwKICAgIC8vICAgICAgICAgICAgIHNlbGYudm90aW5nX2R1cmF0aW9uX2xhcmdlLnZhbHVlLAogICAgLy8gICAgICAgICAgICAgc2VsZi52b3RpbmdfZHVyYXRpb25feGxhcmdlLnZhbHVlLAogICAgLy8gICAgICAgICApCiAgICAvLyAgICAgKSwKICAgIC8vICAgICBxdW9ydW09Rml4ZWRBcnJheSgKICAgIC8vICAgICAgICAgKAogICAgLy8gICAgICAgICAgICAgc2VsZi5xdW9ydW1fc21hbGwudmFsdWUsCiAgICAvLyAgICAgICAgICAgICBzZWxmLnF1b3J1bV9tZWRpdW0udmFsdWUsICAjIE5vIGxvbmdlciB1c2VkCiAgICAvLyAgICAgICAgICAgICBzZWxmLnF1b3J1bV9sYXJnZS52YWx1ZSwKICAgIC8vICAgICAgICAgKQogICAgLy8gICAgICksCiAgICAvLyAgICAgd2VpZ2h0ZWRfcXVvcnVtPUZpeGVkQXJyYXkoCiAgICAvLyAgICAgICAgICgKICAgIC8vICAgICAgICAgICAgIHNlbGYud2VpZ2h0ZWRfcXVvcnVtX3NtYWxsLnZhbHVlLAogICAgLy8gICAgICAgICAgICAgc2VsZi53ZWlnaHRlZF9xdW9ydW1fbWVkaXVtLnZhbHVlLCAgIyBObyBsb25nZXIgdXNlZAogICAgLy8gICAgICAgICAgICAgc2VsZi53ZWlnaHRlZF9xdW9ydW1fbGFyZ2UudmFsdWUsCiAgICAvLyAgICAgICAgICkKICAgIC8vICAgICApLAogICAgLy8gICAgIG91dHN0YW5kaW5nX2Z1bmRzPXNlbGYub3V0c3RhbmRpbmdfZnVuZHMudmFsdWUsCiAgICAvLyAgICAgcGVuZGluZ19wcm9wb3NhbHM9c2VsZi5wZW5kaW5nX3Byb3Bvc2Fscy52YWx1ZSwKICAgIC8vICAgICBjb21taXR0ZWVfaWQ9c2VsZi5jb21taXR0ZWVfaWQudmFsdWUuY29weSgpLAogICAgLy8gICAgIGNvbW1pdHRlZV9tZW1iZXJzPXNlbGYuY29tbWl0dGVlX21lbWJlcnMudmFsdWUsCiAgICAvLyAgICAgY29tbWl0dGVlX3ZvdGVzPXNlbGYuY29tbWl0dGVlX3ZvdGVzLnZhbHVlLAogICAgLy8gICAgIGFic2VuY2VfdG9sZXJhbmNlPXNlbGYuYWJzZW5jZV90b2xlcmFuY2UudmFsdWUsCiAgICAvLyAgICAgZ292ZXJuYW5jZV9wZXJpb2Q9c2VsZi5nb3Zlcm5hbmNlX3BlcmlvZC52YWx1ZSwKICAgIC8vICAgICBjb21taXR0ZWVfZ3JhY2VfcGVyaW9kPXNlbGYuY29tbWl0dGVlX2dyYWNlX3BlcmlvZC52YWx1ZSwKICAgIC8vICAgICBjb21taXR0ZWVfbGFzdF9hbmNob3I9c2VsZi5jb21taXR0ZWVfbGFzdF9hbmNob3IudmFsdWUsCiAgICAvLyApCiAgICBieXRlYyA2IC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDMwCiAgICBzZXRiaXQKICAgIGludGNfMSAvLyAxCiAgICB1bmNvdmVyIDI5CiAgICBzZXRiaXQKICAgIHVuY292ZXIgMjcKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyNgogICAgY29uY2F0CiAgICB1bmNvdmVyIDI1CiAgICBjb25jYXQKICAgIHVuY292ZXIgMjQKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMjEKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyMAogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDE5CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMTgKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxNwogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDE2CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMTUKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDEzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMTIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxMQogICAgY29uY2F0CiAgICB1bmNvdmVyIDEwCiAgICBjb25jYXQKICAgIHVuY292ZXIgOQogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDgKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciA3CiAgICBjb25jYXQKICAgIHVuY292ZXIgNgogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDUKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNTQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMueGdvdl9yZWdpc3RyeS5jb250cmFjdC5YR292UmVnaXN0cnkuZ2V0X3hnb3ZfYm94W3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3hnb3ZfYm94OgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTYxOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIyNwogICAgLy8gcmV0dXJuIGEgaW4gc2VsZi54Z292X2JveAogICAgYnl0ZWNfMSAvLyAweDc4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTYzMgogICAgLy8gaWYgZXhpc3RzOgogICAgYnogZ2V0X3hnb3ZfYm94X2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNjMzCiAgICAvLyB2YWwgPSBzZWxmLnhnb3ZfYm94W3hnb3ZfYWRkcmVzc10uY29weSgpCiAgICBzd2FwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi54Z292X2JveCBlbnRyeSBleGlzdHMKCmdldF94Z292X2JveF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNjE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjIDYgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmdldF94Z292X2JveF9lbHNlX2JvZHlAMzoKICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTYzNS0xNjQwCiAgICAvLyB2YWwgPSB0eXAuWEdvdkJveFZhbHVlKAogICAgLy8gICAgIHZvdGluZ19hZGRyZXNzPUFjY291bnQoKSwKICAgIC8vICAgICB0b2xlcmF0ZWRfYWJzZW5jZXM9VUludDY0KDApLAogICAgLy8gICAgIGxhc3Rfdm90ZV90aW1lc3RhbXA9VUludDY0KDApLAogICAgLy8gICAgIHN1YnNjcmlwdGlvbl9yb3VuZD1VSW50NjQoMCksCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgYmFzZTMyKEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSkKICAgIGIgZ2V0X3hnb3ZfYm94X2FmdGVyX2lmX2Vsc2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy54Z292X3JlZ2lzdHJ5LmNvbnRyYWN0LlhHb3ZSZWdpc3RyeS5nZXRfcHJvcG9zZXJfYm94W3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3Byb3Bvc2VyX2JveDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE2NDQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNjYwCiAgICAvLyBleGlzdHMgPSBwcm9wb3Nlcl9hZGRyZXNzIGluIHNlbGYucHJvcG9zZXJfYm94CiAgICBieXRlY18zIC8vIDB4NzAKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNjYxCiAgICAvLyBpZiBleGlzdHM6CiAgICBieiBnZXRfcHJvcG9zZXJfYm94X2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNjYyCiAgICAvLyB2YWwgPSBzZWxmLnByb3Bvc2VyX2JveFtwcm9wb3Nlcl9hZGRyZXNzXS5jb3B5KCkKICAgIHN3YXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnByb3Bvc2VyX2JveCBlbnRyeSBleGlzdHMKCmdldF9wcm9wb3Nlcl9ib3hfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTY0NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlYyA2IC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgY29uY2F0CiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpnZXRfcHJvcG9zZXJfYm94X2Vsc2VfYm9keUAzOgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNjY0LTE2NjgKICAgIC8vIHZhbCA9IHR5cC5Qcm9wb3NlckJveFZhbHVlKAogICAgLy8gICAgIGFjdGl2ZV9wcm9wb3NhbD1GYWxzZSwKICAgIC8vICAgICBreWNfc3RhdHVzPUZhbHNlLAogICAgLy8gICAgIGt5Y19leHBpcmluZz1VSW50NjQoMCksCiAgICAvLyApCiAgICBieXRlYyA1MiAvLyAweDAwMDAwMDAwMDAwMDAwMDAwMAogICAgYiBnZXRfcHJvcG9zZXJfYm94X2FmdGVyX2lmX2Vsc2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy54Z292X3JlZ2lzdHJ5LmNvbnRyYWN0LlhHb3ZSZWdpc3RyeS5nZXRfcmVxdWVzdF9ib3hbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfcmVxdWVzdF9ib3g6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNjcyCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE2ODgKICAgIC8vIGV4aXN0cyA9IHJlcXVlc3RfaWQgaW4gc2VsZi5yZXF1ZXN0X2JveAogICAgaXRvYgogICAgYnl0ZWMgMjMgLy8gMHg3MgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE2ODkKICAgIC8vIGlmIGV4aXN0czoKICAgIGJ6IGdldF9yZXF1ZXN0X2JveF9lbHNlX2JvZHlAMwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTY5MAogICAgLy8gdmFsID0gc2VsZi5yZXF1ZXN0X2JveFtyZXF1ZXN0X2lkXS5jb3B5KCkKICAgIHN3YXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlcXVlc3RfYm94IGVudHJ5IGV4aXN0cwoKZ2V0X3JlcXVlc3RfYm94X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE2NzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWMgNiAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZ2V0X3JlcXVlc3RfYm94X2Vsc2VfYm9keUAzOgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNjkyLTE2OTYKICAgIC8vIHZhbCA9IHR5cC5YR292U3Vic2NyaWJlUmVxdWVzdEJveFZhbHVlKAogICAgLy8gICAgIHhnb3ZfYWRkcj1BY2NvdW50KCksCiAgICAvLyAgICAgb3duZXJfYWRkcj1BY2NvdW50KCksCiAgICAvLyAgICAgcmVsYXRpb25fdHlwZT1VSW50NjQoMCksCiAgICAvLyApCiAgICBieXRlYyA1NSAvLyBiYXNlMzIoQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEpCiAgICBiIGdldF9yZXF1ZXN0X2JveF9hZnRlcl9pZl9lbHNlQDQKCgovLyBzbWFydF9jb250cmFjdHMueGdvdl9yZWdpc3RyeS5jb250cmFjdC5YR292UmVnaXN0cnkuZ2V0X3JlcXVlc3RfdW5zdWJzY3JpYmVfYm94W3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3JlcXVlc3RfdW5zdWJzY3JpYmVfYm94OgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTcwMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNzE0CiAgICAvLyBleGlzdHMgPSByZXF1ZXN0X2lkIGluIHNlbGYucmVxdWVzdF91bnN1YnNjcmliZV9ib3gKICAgIGl0b2IKICAgIGJ5dGVjIDI0IC8vIDB4NzI3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE3MTUKICAgIC8vIGlmIGV4aXN0czoKICAgIGJ6IGdldF9yZXF1ZXN0X3Vuc3Vic2NyaWJlX2JveF9lbHNlX2JvZHlAMwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MTcxNgogICAgLy8gdmFsID0gc2VsZi5yZXF1ZXN0X3Vuc3Vic2NyaWJlX2JveFtyZXF1ZXN0X2lkXS5jb3B5KCkKICAgIHN3YXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlcXVlc3RfdW5zdWJzY3JpYmVfYm94IGVudHJ5IGV4aXN0cwoKZ2V0X3JlcXVlc3RfdW5zdWJzY3JpYmVfYm94X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE3MDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWMgNiAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZ2V0X3JlcXVlc3RfdW5zdWJzY3JpYmVfYm94X2Vsc2VfYm9keUAzOgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNzE4LTE3MjIKICAgIC8vIHZhbCA9IHR5cC5YR292U3Vic2NyaWJlUmVxdWVzdEJveFZhbHVlKAogICAgLy8gICAgIHhnb3ZfYWRkcj1BY2NvdW50KCksCiAgICAvLyAgICAgb3duZXJfYWRkcj1BY2NvdW50KCksCiAgICAvLyAgICAgcmVsYXRpb25fdHlwZT1VSW50NjQoMCksCiAgICAvLyApCiAgICBieXRlYyA1NSAvLyBiYXNlMzIoQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEpCiAgICBiIGdldF9yZXF1ZXN0X3Vuc3Vic2NyaWJlX2JveF9hZnRlcl9pZl9lbHNlQDQKCgovLyBzbWFydF9jb250cmFjdHMueGdvdl9yZWdpc3RyeS5jb250cmFjdC5YR292UmVnaXN0cnkuaXNfcHJvcG9zYWxbcm91dGluZ10oKSAtPiB2b2lkOgppc19wcm9wb3NhbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE3MjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNzI4CiAgICAvLyBhc3NlcnQgc2VsZi5faXNfcHJvcG9zYWwocHJvcG9zYWxfaWQpLCBlcnIuSU5WQUxJRF9QUk9QT1NBTAogICAgY2FsbHN1YiBfaXNfcHJvcG9zYWwKICAgIGFzc2VydCAvLyBJbnZhbGlkIHByb3Bvc2FsCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToxNzI2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy54Z292X3JlZ2lzdHJ5LmNvbnRyYWN0LlhHb3ZSZWdpc3RyeS5pc194Z292X21hbmFnZXIoKSAtPiB1aW50NjQ6CmlzX3hnb3ZfbWFuYWdlcjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIxNQogICAgLy8gcmV0dXJuIFR4bi5zZW5kZXIgPT0gc2VsZi54Z292X21hbmFnZXIudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA3IC8vIDB4Nzg2NzZmNzY1ZjZkNjE2ZTYxNjc2NTcyCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYueGdvdl9tYW5hZ2VyIGV4aXN0cwogICAgPT0KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy54Z292X3JlZ2lzdHJ5LmNvbnRyYWN0LlhHb3ZSZWdpc3RyeS5pc194Z292X3BheW9yKCkgLT4gdWludDY0Ogppc194Z292X3BheW9yOgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjE4CiAgICAvLyByZXR1cm4gVHhuLnNlbmRlciA9PSBzZWxmLnhnb3ZfcGF5b3IudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA5IC8vIDB4Nzg2NzZmNzY1ZjcwNjE3OTZmNzIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi54Z292X3BheW9yIGV4aXN0cwogICAgPT0KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy54Z292X3JlZ2lzdHJ5LmNvbnRyYWN0LlhHb3ZSZWdpc3RyeS5pc194Z292X3N1YnNjcmliZXIoKSAtPiB1aW50NjQ6CmlzX3hnb3Zfc3Vic2NyaWJlcjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIyMQogICAgLy8gcmV0dXJuIFR4bi5zZW5kZXIgPT0gc2VsZi54Z292X3N1YnNjcmliZXIudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNSAvLyAweDc4Njc2Zjc2NWY3Mzc1NjI3MzYzNzI2OTYyNjU3MgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnhnb3Zfc3Vic2NyaWJlciBleGlzdHMKICAgID09CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMueGdvdl9yZWdpc3RyeS5jb250cmFjdC5YR292UmVnaXN0cnkuY2FsbGVyX2lzX3hnb3Zfb3Jfdm90aW5nX2FkZHJlc3MoeGdvdl9hZGRyZXNzOiBieXRlcykgLT4gdWludDY0OgpjYWxsZXJfaXNfeGdvdl9vcl92b3RpbmdfYWRkcmVzczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIyOQogICAgLy8gZGVmIGNhbGxlcl9pc194Z292X29yX3ZvdGluZ19hZGRyZXNzKHNlbGYsIHhnb3ZfYWRkcmVzczogQWNjb3VudCkgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjMxCiAgICAvLyBUeG4uc2VuZGVyID09IHhnb3ZfYWRkcmVzcwogICAgdHhuIFNlbmRlcgogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjMxLTIzMgogICAgLy8gVHhuLnNlbmRlciA9PSB4Z292X2FkZHJlc3MKICAgIC8vIG9yIFR4bi5zZW5kZXIgPT0gc2VsZi54Z292X2JveFt4Z292X2FkZHJlc3NdLnZvdGluZ19hZGRyZXNzCiAgICBibnogY2FsbGVyX2lzX3hnb3Zfb3Jfdm90aW5nX2FkZHJlc3NfYm9vbF90cnVlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIzMgogICAgLy8gb3IgVHhuLnNlbmRlciA9PSBzZWxmLnhnb3ZfYm94W3hnb3ZfYWRkcmVzc10udm90aW5nX2FkZHJlc3MKICAgIHR4biBTZW5kZXIKICAgIGJ5dGVjXzEgLy8gMHg3OAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnhnb3ZfYm94IGVudHJ5IGV4aXN0cwogICAgZXh0cmFjdCAwIDMyCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjMxLTIzMgogICAgLy8gVHhuLnNlbmRlciA9PSB4Z292X2FkZHJlc3MKICAgIC8vIG9yIFR4bi5zZW5kZXIgPT0gc2VsZi54Z292X2JveFt4Z292X2FkZHJlc3NdLnZvdGluZ19hZGRyZXNzCiAgICBieiBjYWxsZXJfaXNfeGdvdl9vcl92b3RpbmdfYWRkcmVzc19ib29sX2ZhbHNlQDMKCmNhbGxlcl9pc194Z292X29yX3ZvdGluZ19hZGRyZXNzX2Jvb2xfdHJ1ZUAyOgogICAgaW50Y18xIC8vIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIzMC0yMzMKICAgIC8vIHJldHVybiAoCiAgICAvLyAgICAgVHhuLnNlbmRlciA9PSB4Z292X2FkZHJlc3MKICAgIC8vICAgICBvciBUeG4uc2VuZGVyID09IHNlbGYueGdvdl9ib3hbeGdvdl9hZGRyZXNzXS52b3RpbmdfYWRkcmVzcwogICAgLy8gKQogICAgcmV0c3ViCgpjYWxsZXJfaXNfeGdvdl9vcl92b3RpbmdfYWRkcmVzc19ib29sX2ZhbHNlQDM6CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjMwLTIzMwogICAgLy8gcmV0dXJuICgKICAgIC8vICAgICBUeG4uc2VuZGVyID09IHhnb3ZfYWRkcmVzcwogICAgLy8gICAgIG9yIFR4bi5zZW5kZXIgPT0gc2VsZi54Z292X2JveFt4Z292X2FkZHJlc3NdLnZvdGluZ19hZGRyZXNzCiAgICAvLyApCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMueGdvdl9yZWdpc3RyeS5jb250cmFjdC5YR292UmVnaXN0cnkuX2lzX3Byb3Bvc2FsKHByb3Bvc2FsOiB1aW50NjQpIC0+IHVpbnQ2NDoKX2lzX3Byb3Bvc2FsOgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjM1CiAgICAvLyBkZWYgX2lzX3Byb3Bvc2FsKHNlbGYsIHByb3Bvc2FsOiBBcHBsaWNhdGlvbikgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjM2CiAgICAvLyByZXR1cm4gcHJvcG9zYWwuY3JlYXRvciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcENyZWF0b3IKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LmdldF9wcm9wb3NhbF9wcm9wb3Nlcihwcm9wb3NhbDogdWludDY0KSAtPiBieXRlczoKZ2V0X3Byb3Bvc2FsX3Byb3Bvc2VyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjQzCiAgICAvLyBkZWYgZ2V0X3Byb3Bvc2FsX3Byb3Bvc2VyKHNlbGYsIHByb3Bvc2FsOiBBcHBsaWNhdGlvbikgLT4gQWNjb3VudDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjQ0LTI0NgogICAgLy8gcHJvcG9zZXJfYnl0ZXMsIHByb3Bvc2VyX2V4aXN0cyA9IG9wLkFwcEdsb2JhbC5nZXRfZXhfYnl0ZXMoCiAgICAvLyAgICAgcHJvcG9zYWwsIHBjZmcuR1NfS0VZX1BST1BPU0VSCiAgICAvLyApCiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI0NQogICAgLy8gcHJvcG9zYWwsIHBjZmcuR1NfS0VZX1BST1BPU0VSCiAgICBwdXNoYnl0ZXMgMHg3MDcyNmY3MDZmNzM2NTcyCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyNDQtMjQ2CiAgICAvLyBwcm9wb3Nlcl9ieXRlcywgcHJvcG9zZXJfZXhpc3RzID0gb3AuQXBwR2xvYmFsLmdldF9leF9ieXRlcygKICAgIC8vICAgICBwcm9wb3NhbCwgcGNmZy5HU19LRVlfUFJPUE9TRVIKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyNDcKICAgIC8vIGFzc2VydCBwcm9wb3Nlcl9leGlzdHMsIGVyci5NSVNTSU5HX0tFWQogICAgYXNzZXJ0IC8vIE1pc3Npbmcga2V5IGluIHN0YXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyNDgKICAgIC8vIHJldHVybiBBY2NvdW50KHByb3Bvc2VyX2J5dGVzKQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBBZGRyZXNzIGxlbmd0aCBpcyAzMiBieXRlcwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LmNvbXB1dGVfYXZhaWxhYmxlX2Z1bmRzKCkgLT4gdWludDY0Ogpjb21wdXRlX2F2YWlsYWJsZV9mdW5kczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI1OQogICAgLy8gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5iYWxhbmNlCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI2MAogICAgLy8gLSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLm1pbl9iYWxhbmNlCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI1OS0yNjAKICAgIC8vIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MuYmFsYW5jZQogICAgLy8gLSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLm1pbl9iYWxhbmNlCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyNjItMjYzCiAgICAvLyAjIEVuc3VyZSB0aGF0IHNwZW5kYWJsZSBmdW5kcyBleGNlZWQgZnVuZHMgYWxsb2NhdGVkIHRvIFByb3Bvc2FscwogICAgLy8gYXNzZXJ0IHNwZW5kYWJsZV9mdW5kcyA+IHNlbGYub3V0c3RhbmRpbmdfZnVuZHMudmFsdWUsIGVyci5JTlNVRkZJQ0lFTlRfRlVORFMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vIDB4NmY3NTc0NzM3NDYxNmU2NDY5NmU2NzVmNjY3NTZlNjQ3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm91dHN0YW5kaW5nX2Z1bmRzIGV4aXN0cwogICAgZHVwMgogICAgPgogICAgYXNzZXJ0IC8vIEluc3VmZmljaWVudCBmdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjY0CiAgICAvLyByZXR1cm4gc3BlbmRhYmxlX2Z1bmRzIC0gc2VsZi5vdXRzdGFuZGluZ19mdW5kcy52YWx1ZQogICAgLQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LnZhbGlkX3hnb3ZfcGF5bWVudChwYXltZW50OiB1aW50NjQpIC0+IHVpbnQ2NDoKdmFsaWRfeGdvdl9wYXltZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjczCiAgICAvLyBkZWYgdmFsaWRfeGdvdl9wYXltZW50KHNlbGYsIHBheW1lbnQ6IGd0eG4uUGF5bWVudFRyYW5zYWN0aW9uKSAtPiBib29sOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyNzUKICAgIC8vIHBheW1lbnQucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyNzUtMjc2CiAgICAvLyBwYXltZW50LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIC8vIGFuZCBwYXltZW50LmFtb3VudCA9PSBzZWxmLnhnb3ZfZmVlLnZhbHVlCiAgICBieiB2YWxpZF94Z292X3BheW1lbnRfYm9vbF9mYWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyNzYKICAgIC8vIGFuZCBwYXltZW50LmFtb3VudCA9PSBzZWxmLnhnb3ZfZmVlLnZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFtb3VudAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE5IC8vIDB4Nzg2NzZmNzY1ZjY2NjU2NQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnhnb3ZfZmVlIGV4aXN0cwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI3NS0yNzYKICAgIC8vIHBheW1lbnQucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgLy8gYW5kIHBheW1lbnQuYW1vdW50ID09IHNlbGYueGdvdl9mZWUudmFsdWUKICAgIGJ6IHZhbGlkX3hnb3ZfcGF5bWVudF9ib29sX2ZhbHNlQDMKICAgIGludGNfMSAvLyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyNzQtMjc3CiAgICAvLyByZXR1cm4gKAogICAgLy8gICAgIHBheW1lbnQucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgLy8gICAgIGFuZCBwYXltZW50LmFtb3VudCA9PSBzZWxmLnhnb3ZfZmVlLnZhbHVlCiAgICAvLyApCiAgICByZXRzdWIKCnZhbGlkX3hnb3ZfcGF5bWVudF9ib29sX2ZhbHNlQDM6CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6Mjc0LTI3NwogICAgLy8gcmV0dXJuICgKICAgIC8vICAgICBwYXltZW50LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIC8vICAgICBhbmQgcGF5bWVudC5hbW91bnQgPT0gc2VsZi54Z292X2ZlZS52YWx1ZQogICAgLy8gKQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LnZhbGlkX2t5YyhhZGRyZXNzOiBieXRlcykgLT4gdWludDY0Ogp2YWxpZF9reWM6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyNzkKICAgIC8vIGRlZiB2YWxpZF9reWMoc2VsZiwgYWRkcmVzczogQWNjb3VudCkgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjgxCiAgICAvLyBzZWxmLnByb3Bvc2VyX2JveFthZGRyZXNzXS5reWNfc3RhdHVzCiAgICBieXRlY18zIC8vIDB4NzAKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnByb3Bvc2VyX2JveCBlbnRyeSBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICBnZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI4MS0yODIKICAgIC8vIHNlbGYucHJvcG9zZXJfYm94W2FkZHJlc3NdLmt5Y19zdGF0dXMKICAgIC8vIGFuZCBzZWxmLnByb3Bvc2VyX2JveFthZGRyZXNzXS5reWNfZXhwaXJpbmcgPiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgYnogdmFsaWRfa3ljX2Jvb2xfZmFsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjgyCiAgICAvLyBhbmQgc2VsZi5wcm9wb3Nlcl9ib3hbYWRkcmVzc10ua3ljX2V4cGlyaW5nID4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGZyYW1lX2RpZyAwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcm9wb3Nlcl9ib3ggZW50cnkgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgZXh0cmFjdF91aW50NjQKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgID4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI4MS0yODIKICAgIC8vIHNlbGYucHJvcG9zZXJfYm94W2FkZHJlc3NdLmt5Y19zdGF0dXMKICAgIC8vIGFuZCBzZWxmLnByb3Bvc2VyX2JveFthZGRyZXNzXS5reWNfZXhwaXJpbmcgPiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgYnogdmFsaWRfa3ljX2Jvb2xfZmFsc2VAMwogICAgaW50Y18xIC8vIDEKCnZhbGlkX2t5Y19ib29sX21lcmdlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyODAtMjgzCiAgICAvLyByZXR1cm4gKAogICAgLy8gICAgIHNlbGYucHJvcG9zZXJfYm94W2FkZHJlc3NdLmt5Y19zdGF0dXMKICAgIC8vICAgICBhbmQgc2VsZi5wcm9wb3Nlcl9ib3hbYWRkcmVzc10ua3ljX2V4cGlyaW5nID4gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vICkKICAgIHN3YXAKICAgIHJldHN1YgoKdmFsaWRfa3ljX2Jvb2xfZmFsc2VAMzoKICAgIGludGNfMCAvLyAwCiAgICBiIHZhbGlkX2t5Y19ib29sX21lcmdlQDQKCgovLyBzbWFydF9jb250cmFjdHMueGdvdl9yZWdpc3RyeS5jb250cmFjdC5YR292UmVnaXN0cnkuZ2V0X2NvbW1pdHRlZV9hbmNob3IoKSAtPiB1aW50NjQ6CmdldF9jb21taXR0ZWVfYW5jaG9yOgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MzA5CiAgICAvLyByID0gR2xvYmFsLnJvdW5kCiAgICBnbG9iYWwgUm91bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMxMAogICAgLy8gcmV0dXJuIHIgLSAociAlIHNlbGYuZ292ZXJuYW5jZV9wZXJpb2QudmFsdWUpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNDkgLy8gMHg2NzZmNzY2NTcyNmU2MTZlNjM2NTVmNzA2NTcyNjk2ZjY0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ292ZXJuYW5jZV9wZXJpb2QgZXhpc3RzCiAgICBkaWcgMQogICAgc3dhcAogICAgJQogICAgLQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LmRlY3JlbWVudF9wZW5kaW5nX3Byb3Bvc2Fscyhwcm9wb3NhbDogdWludDY0KSAtPiB2b2lkOgpkZWNyZW1lbnRfcGVuZGluZ19wcm9wb3NhbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTozNDUKICAgIC8vIGRlZiBkZWNyZW1lbnRfcGVuZGluZ19wcm9wb3NhbHMoc2VsZiwgcHJvcG9zYWw6IEFwcGxpY2F0aW9uKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTozNDYKICAgIC8vIHNlbGYucGVuZGluZ19wcm9wb3NhbHMudmFsdWUgLT0gMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDggLy8gMHg3MDY1NmU2NDY5NmU2NzVmNzA3MjZmNzA2ZjczNjE2YzczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucGVuZGluZ19wcm9wb3NhbHMgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgYnl0ZWMgOCAvLyAweDcwNjU2ZTY0Njk2ZTY3NWY3MDcyNmY3MDZmNzM2MTZjNzMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTozNDcKICAgIC8vIHByb3Bvc2VyID0gc2VsZi5nZXRfcHJvcG9zYWxfcHJvcG9zZXIocHJvcG9zYWwpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgZ2V0X3Byb3Bvc2FsX3Byb3Bvc2VyCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTozNDgKICAgIC8vIHNlbGYucHJvcG9zZXJfYm94W3Byb3Bvc2VyXS5hY3RpdmVfcHJvcG9zYWwgPSBGYWxzZQogICAgYnl0ZWNfMyAvLyAweDcwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGludGNfMSAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgc2V0Yml0CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgYm94X3JlcGxhY2UgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy54Z292X3JlZ2lzdHJ5LmNvbnRyYWN0LlhHb3ZSZWdpc3RyeS5zdWJzY3JpYmVfeGdvdl9hbmRfZW1pdCh4Z292X2FkZHJlc3M6IGJ5dGVzLCB2b3RpbmdfYWRkcmVzczogYnl0ZXMpIC0+IHZvaWQ6CnN1YnNjcmliZV94Z292X2FuZF9lbWl0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MzY3LTM2OQogICAgLy8gZGVmIHN1YnNjcmliZV94Z292X2FuZF9lbWl0KAogICAgLy8gICAgIHNlbGYsICosIHhnb3ZfYWRkcmVzczogQWNjb3VudCwgdm90aW5nX2FkZHJlc3M6IEFjY291bnQKICAgIC8vICkgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MjI3CiAgICAvLyByZXR1cm4gYSBpbiBzZWxmLnhnb3ZfYm94CiAgICBieXRlY18xIC8vIDB4NzgKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MzcwLTM3MQogICAgLy8gIyBUaGUgZm9sbG93aW5nIGFzc2VydGlvbiBtYXkgYmUgcmVkdW5kYW50IGluIHNvbWUgaW52b2NhdGlvbnMuCiAgICAvLyBhc3NlcnQgbm90IHNlbGYuaGFzX3hnb3Zfc3RhdHVzKHhnb3ZfYWRkcmVzcyksIGVyci5BTFJFQURZX1hHT1YKICAgICEKICAgIGFzc2VydCAvLyBBbHJlYWR5IGFuIHhHb3YKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM2MgogICAgLy8gdG9sZXJhdGVkX2Fic2VuY2VzPXNlbGYuYWJzZW5jZV90b2xlcmFuY2UudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjIgLy8gMHg2MTYyNzM2NTZlNjM2NTVmNzQ2ZjZjNjU3MjYxNmU2MzY1CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWJzZW5jZV90b2xlcmFuY2UgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTozNjQKICAgIC8vIHN1YnNjcmlwdGlvbl9yb3VuZD1HbG9iYWwucm91bmQsCiAgICBnbG9iYWwgUm91bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM2MC0zNjUKICAgIC8vIHJldHVybiB0eXAuWEdvdkJveFZhbHVlKAogICAgLy8gICAgIHZvdGluZ19hZGRyZXNzPXZvdGluZ19hZGRyZXNzLAogICAgLy8gICAgIHRvbGVyYXRlZF9hYnNlbmNlcz1zZWxmLmFic2VuY2VfdG9sZXJhbmNlLnZhbHVlLAogICAgLy8gICAgIGxhc3Rfdm90ZV90aW1lc3RhbXA9VUludDY0KDApLAogICAgLy8gICAgIHN1YnNjcmlwdGlvbl9yb3VuZD1HbG9iYWwucm91bmQsCiAgICAvLyApCiAgICBzd2FwCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MzYzCiAgICAvLyBsYXN0X3ZvdGVfdGltZXN0YW1wPVVJbnQ2NCgwKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTozNjAtMzY1CiAgICAvLyByZXR1cm4gdHlwLlhHb3ZCb3hWYWx1ZSgKICAgIC8vICAgICB2b3RpbmdfYWRkcmVzcz12b3RpbmdfYWRkcmVzcywKICAgIC8vICAgICB0b2xlcmF0ZWRfYWJzZW5jZXM9c2VsZi5hYnNlbmNlX3RvbGVyYW5jZS52YWx1ZSwKICAgIC8vICAgICBsYXN0X3ZvdGVfdGltZXN0YW1wPVVJbnQ2NCgwKSwKICAgIC8vICAgICBzdWJzY3JpcHRpb25fcm91bmQ9R2xvYmFsLnJvdW5kLAogICAgLy8gKQogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM3MgogICAgLy8gc2VsZi54Z292X2JveFt4Z292X2FkZHJlc3NdID0gc2VsZi5tYWtlX3hnb3ZfYm94KHZvdGluZ19hZGRyZXNzKQogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MzczCiAgICAvLyBzZWxmLnhnb3ZzLnZhbHVlICs9IDEKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMSAvLyAweDc4Njc2Zjc2NzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi54Z292cyBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBieXRlYyAxMSAvLyAweDc4Njc2Zjc2NzMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTozNzYKICAgIC8vIHhnb3Y9eGdvdl9hZGRyZXNzLCBkZWxlZ2F0ZT12b3RpbmdfYWRkcmVzcywgcm91bmQ9R2xvYmFsLnJvdW5kCiAgICBnbG9iYWwgUm91bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM3NS0zNzcKICAgIC8vIHR5cC5YR292U3Vic2NyaWJlZCgKICAgIC8vICAgICB4Z292PXhnb3ZfYWRkcmVzcywgZGVsZWdhdGU9dm90aW5nX2FkZHJlc3MsIHJvdW5kPUdsb2JhbC5yb3VuZAogICAgLy8gKQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTozNzQtMzc4CiAgICAvLyBhcmM0LmVtaXQoCiAgICAvLyAgICAgdHlwLlhHb3ZTdWJzY3JpYmVkKAogICAgLy8gICAgICAgICB4Z292PXhnb3ZfYWRkcmVzcywgZGVsZWdhdGU9dm90aW5nX2FkZHJlc3MsIHJvdW5kPUdsb2JhbC5yb3VuZAogICAgLy8gICAgICkKICAgIC8vICkKICAgIHB1c2hieXRlcyAweDI0MWZkYzUxIC8vIG1ldGhvZCAiWEdvdlN1YnNjcmliZWQoYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnhnb3ZfcmVnaXN0cnkuY29udHJhY3QuWEdvdlJlZ2lzdHJ5LnVuc3Vic2NyaWJlX3hnb3ZfYW5kX2VtaXQoeGdvdl9hZGRyZXNzOiBieXRlcykgLT4gdm9pZDoKdW5zdWJzY3JpYmVfeGdvdl9hbmRfZW1pdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM4MAogICAgLy8gZGVmIHVuc3Vic2NyaWJlX3hnb3ZfYW5kX2VtaXQoc2VsZiwgeGdvdl9hZGRyZXNzOiBBY2NvdW50KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weToyMjcKICAgIC8vIHJldHVybiBhIGluIHNlbGYueGdvdl9ib3gKICAgIGJ5dGVjXzEgLy8gMHg3OAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMveGdvdl9yZWdpc3RyeS9jb250cmFjdC5weTozODEtMzgyCiAgICAvLyAjIFRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIG1heSBiZSByZWR1bmRhbnQgaW4gc29tZSBpbnZvY2F0aW9ucy4KICAgIC8vIGFzc2VydCBzZWxmLmhhc194Z292X3N0YXR1cyh4Z292X2FkZHJlc3MpLCBlcnIuTk9UX1hHT1YKICAgIGFzc2VydCAvLyBOb3QgYW4geEdvdgogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6MzgzCiAgICAvLyBkZWwgc2VsZi54Z292X2JveFt4Z292X2FkZHJlc3NdCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy94Z292X3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM4NAogICAgLy8gc2VsZi54Z292cy52YWx1ZSAtPSAxCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTEgLy8gMHg3ODY3NmY3NjczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYueGdvdnMgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgYnl0ZWMgMTEgLy8gMHg3ODY3NmY3NjczCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3hnb3ZfcmVnaXN0cnkvY29udHJhY3QucHk6Mzg1CiAgICAvLyBhcmM0LmVtaXQodHlwLlhHb3ZVbnN1YnNjcmliZWQoeGdvdj14Z292X2FkZHJlc3MsIHJvdW5kPUdsb2JhbC5yb3VuZCkpCiAgICBnbG9iYWwgUm91bmQKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHg3YmEyNTgwMyAvLyBtZXRob2QgIlhHb3ZVbnN1YnNjcmliZWQoYWRkcmVzcyx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CiAFAAEgCIAQJjkPcGF1c2VkX3JlZ2lzdHJ5AXgEFR98dQFwEW91dHN0YW5kaW5nX2Z1bmRzAnBhAQAMeGdvdl9tYW5hZ2VyEXBlbmRpbmdfcHJvcG9zYWxzCnhnb3ZfcGF5b3IQcGF1c2VkX3Byb3Bvc2FscwV4Z292cwpyZXF1ZXN0X2lkIldyb25nIFByb3Bvc2FsIFN0YXR1cyBvciBmaW5hbGl6ZWQERVJSOg94Z292X3N1YnNjcmliZXIMa3ljX3Byb3ZpZGVyEWNvbW1pdHRlZV9tYW5hZ2VyC3hnb3ZfZGFlbW9uCHhnb3ZfZmVlDHByb3Bvc2VyX2ZlZRFvcGVuX3Byb3Bvc2FsX2ZlZRFhYnNlbmNlX3RvbGVyYW5jZQFyAnJ1DHhnb3ZfY291bmNpbBxkYWVtb25fb3BlcmF0aW9uX2Z1bmRpbmdfYnBzF3Byb3Bvc2FsX2NvbW1pdG1lbnRfYnBzFG1pbl9yZXF1ZXN0ZWRfYW1vdW50Gm1heF9yZXF1ZXN0ZWRfYW1vdW50X3NtYWxsG21heF9yZXF1ZXN0ZWRfYW1vdW50X21lZGl1bRptYXhfcmVxdWVzdGVkX2Ftb3VudF9sYXJnZRlkaXNjdXNzaW9uX2R1cmF0aW9uX3NtYWxsGmRpc2N1c3Npb25fZHVyYXRpb25fbWVkaXVtGWRpc2N1c3Npb25fZHVyYXRpb25fbGFyZ2UaZGlzY3Vzc2lvbl9kdXJhdGlvbl94bGFyZ2UVdm90aW5nX2R1cmF0aW9uX3NtYWxsFnZvdGluZ19kdXJhdGlvbl9tZWRpdW0Vdm90aW5nX2R1cmF0aW9uX2xhcmdlFnZvdGluZ19kdXJhdGlvbl94bGFyZ2UMcXVvcnVtX3NtYWxsDXF1b3J1bV9tZWRpdW0McXVvcnVtX2xhcmdlFXdlaWdodGVkX3F1b3J1bV9zbWFsbBZ3ZWlnaHRlZF9xdW9ydW1fbWVkaXVtFXdlaWdodGVkX3F1b3J1bV9sYXJnZRFjb21taXR0ZWVfbWVtYmVycw9jb21taXR0ZWVfdm90ZXMSbWF4X2NvbW1pdHRlZV9zaXplEWdvdmVybmFuY2VfcGVyaW9kFmNvbW1pdHRlZV9ncmFjZV9wZXJpb2QVY29tbWl0dGVlX2xhc3RfYW5jaG9yCQAAAAAAAAAAAAxjb21taXR0ZWVfaWQPVm90ZXIgbm90IGZvdW5kSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxGEAAtjE1gRwSRDE0gSQSRDE3FEQxNhREJwcyA2cnDzIDZycJMgNnJxkyA2cnEDIDZycRMgNnJxIyA2coImcnCiJnJwQiZycTImcnFCJnJxUiZycaImcnGyJnJxwiZycdImcnHiJnJx8iZycgImcnISJnJyIiZycjImcnJCJnJyUiZycmImcnJyJnJygiZycpImcnKiJnJysiZycsImcnLSJnJy4iZycvImcnMCJnJwsiZycIImcnDCJngARJVsGrNhoAjgEBXDEZFEQxGEEBRYItBJWcR2IEbB9WTQThClEuBIb34OYEOeJtigSYNS6GBPpO1uIE1snMGgRcSEBVBDfWrfEE1CFrbgS6hSDyBBZ3sw4EhLfSaASvfxhgBKCCzvgE3zn9uQTKD2o6BEUHc5AEPDG8AgQNLHiRBJP6zboEzos6HAT66ggfBA2ieIUEek/uQwRS3RDXBNTTemQENDSdzAQVj43WBF/iWTUE2ye5rwT1kQdWBGVhCp8E/caVwgS6kKtUBBpnS0UEqNWulARq5etGBCdjDWUEgk+YvARJVIugBIJnhPYEJpgyAATb2D3ZNhoAji0AKQBMAHEAewCEAI4AlwChALMAxQDXAOkA+wENAR8DMwNgA3UDlwPyBB8ENQSPBLYEzAT3BTgFlwYKBy0IIAkJCcoKnQsnC0cLfwuvC7kNLQ2QDbsN6Q4XAAEAI0OABExcYbo2GgCOAQANADEZgQQSMRgQREIDECcHMQBnJzhJEkQjQzYaAUkVJRJEF4gN8UQnBb1FAUEABicFTNMjQycFTLlIQv/2NhoBSRUlEkQXNhoCSSJZgQIISwEVEkRXAgCIDb1EJwVOArsjQ4gNskQnBbxII0OIDahEKCNnI0OIDZ9EJwojZyNDiA2VRCgiZyNDiA2MRCcKImcjQzYaAUkVJBJEiA16RCcHTGcjQzYaAUkVJBJEiA1oRCcJTGcjQzYaAUkVJBJEiA1WRCcZTGcjQzYaAUkVJBJEiA1ERCcPTGcjQzYaAUkVJBJEiA0yRCcQTGcjQzYaAUkVJBJEiA0gRCcRTGcjQzYaAUkVJBJEiA0ORCcSTGcjQyKAAEcFNhoBRwIVgdABEkSIDPREIltJgdSpAg9BAetJgdSQAg9BAeIjREsBSSVbSU4EgeSWAQ9EgShbSU4EQQHFSwFXMBhJRQwiW0lFC0sEDUEBsksKJVtJRQpLCg1BAaVLCoEQW0sJDUEBmiNESwFJgRBbSU4CTgZJgRhbSU4HSwILgZBOCoHkxYMICEsCSwENRE8CTAmB1JMBCicwTGdXSCBJTgQiW0lOBkEBVEsDJVtJRQ1LBg9BAUdLA4EQW0lFDEsMD0EBOUsDgRhbSwsPQQEuI0RLAVdoIElOBSJbSU4KQQEYSwQlW0lFDUsKD0EBC0sEgRBbSUUMSwwPQQD9SwSBGFtLCw9BAPIjREsBV4gYSU4LIltJTgtBANxLC4EQW0sLDUEA0SNESwFXoBhJTg0iW0lODUEAu0sNgRBbSw0NQQCwI0QnE0xnJxRPAmcnFU8HZycaTwZnSSRbJxtMZyccTwRnSVcwGEkiWycdTGdJJVsnHkxngRBbJx9MZycgTwRnTEklWychTGdJgRBbJyJMZ4EYWycjTGcnJE8DZ0xJJVsnJUxnSYEQWycmTGeBGFsnJ0xnJyhPAmcnKSJnTIEQWycqTGcnK08CZycsImdMgRBbJy1MZ0mBuAFbJxZMZ0mBwAFbJzFMZ4HIAVsnMkxnI0MiQv9NIkL/LCJC/wsiQv7PIkL+YyJC/huICvZEI0M2GgFJFSQSRDEWIwlJOBAjEkQiKGVEFEQpMQBQvUUBFESIC0BEMQBMiAunI0MiKGVEFEQpMQBQvUUBRDEAiAvSI0M2GgFJFSQSRCIoZUQURClLAVBJvUUBRL5IJFsURIgLsCNDNhoBSRUkEkQ2GgJJFSQSRDYaA0kVJRJEFzEWIwlJOBAjEkQxAEsDEkQiKGVEFEQpSwRQvUUBFESICsVEIicMZURPA08DUE8CFlBLARYnF0xQTL8jCCcMTGcjQzYaAUkVJRJEF4gKOkQWJxdMUEm+RElXACBMVyAgKUsCUL1FARREiArqvEgjQzYaAUkVJRJEF4gKDUQWJxdMULxII0M2GgFJFSQSRDYaAkkVJBJENhoDSRUlEkQXMRYjCUk4ECMSRDEASwMSRCIoZUQURClLBFC9RQFEiAooRCInDGVETwNPA1BPAhZQSwEWJxhMUEy/IwgnDExnI0M2GgFJFSUSRBeICZ1EFicYTFBJvkRXACApSwFQvUUBRIgKk7xII0M2GgFJFSUSRBeICXZEFicYTFC8SCNDNhoBSRUkEkQ2GgJJFSQSRCIoZUQURClLAlBJvUUBRE8CiAlRRCJPArsjQzEWIwlJOBAjEkQiKGVEFEQrMQBQvUUBFERJOAcyChJEOAgiJxRlRBJEKzEAUCc0vzEAMgYWUIAEGsTtzUxQsCNDNhoBSRUkEkQ2GgJJFSMSRCJTNhoDSRUlEkQXMQAiJxBlRBJEK0sDUEm9RQFESb5IIlMnBiJPAlQjTwRUTwIWUL9JiAk4MgYnBiJPA1RPAkxQTBZQgASbWvdhTFCwI0M2GgFJFSQSRDYaAkkVJRJEFzYaA0kVJRJEFzEAIicRZUQSREsBRElEIicwZURLAg9EJzVLA2cnLksCZycvSwFniAj9JzNMZ0wWSZMkDkRXBARMFkmTJA5EVwQEMgZPA08DUE8CUEwWUIAEh5tWqUxQsCNDMRYjCUk4ECMSRCIoZUQURCInCmVEFESICLMyBksBCU4CIiczZUQSQAALIicyZURLAg9BAOojRCsxAFC9RQFEKzEAUL5EIlMURDEAiAhdRDEBMgCBAwsPREk4BzIKEkQ4CCInFWVETEsBEkQyCnMARCcFvURJgQQIIQQKSYECEkRJIwkhBAtPAkwJJwUiIQS6JwUhBE8DurExAE8DsjiBA7I1gRuyNIAECoEBQ7JCTwKyQEyyQIAEzGlOqrIashqBBrIQIrIBs7Q9MgpzAESxSwFyCERMTwMJTwNMCbIIsgcjshAisgGzMQAiJwhlRCMIJwhMZytMUEkiI7oiI1QiTLsxADIGTwIWSU8DUE8CFlCABA0aBRlMULAqTFCwI0MiQv8TNhoBSRUlEkQXNhoCSRUkEkQ2GgNJFSUSRDYaBEkVJRJEIihlRBRESwOIBwZEKUsDUEm9RQFESwOIBtlEIicWZUQWSwEkTwK7MgcWgShMu7FPA7IYgAQYQaDSshpPArIaTLIashqBBrIQIrIBs7Q+RwJXAAQqEkRJVwQASSJZgQIITBUSRFcGAEkVSYEEDEEAV08CSCJBAEmBBEsBD4EESwJPAk1MUicNJzaCAg1Wb3RlcyBpbnZhbGlkFVZvdGluZyBQZXJpb2QgRXhwaXJlZE8EjgQABAADAAIAAQAAAAAASIAAEkQjQ08CVwYEJw4SQv+iIkk2GgFJFSUSRBc2GgJJTgJJIllJTgMkC4ECCEsBFRJEIihlRBRESwGIBhNEsUyyGIAEdv9McLIashqBBrIQIrIBs7Q+RwJXAAQqEkRJVwQASSJZgQIITBUSRFcGAEkVSYEEDEEAd08CSCJBAB2BBEsBD4EESwJPAk1MUicNJzZPAo4CAAIAAQAAAEiAABJEIklLAgxBAERLAlcCAEsBJAskWElFBilMUElFBb1FAUEAJUsDvkQkW0EAHEsDSb5EJFsjCRZLASRPAru+SCRbQAAFSwSIBk4jCEL/tSNDTwJXBgQnDhJC/4I2GgFJFSUSRBeIBRpESYgFRURJiAVMSwGAEHJlcXVlc3RlZF9hbW91bnRlRCtLAlC9RQFESwGIBXNEIicEZURJSwIPRLFLAbIITwKyByOyECKyAbNMCScETGexshiABIpeTICyGoEGshAisgGztD5HAlcABCoSRElXBABJIlmBAghMFRJEVwYASRVJgQQMQQAlTwJIIkEAF4EESwEPgQRLAk8CTUxSJw1MjgEAAQAASIAAEkQjQ08CVwYEJw4SQv/UNhoBSRUlEkQXSYAGc3RhdHVzZUxJTgJOA0RBAAhLAYEKEkEACTEAIicSZUQSREcCiARiRLGyGIAEgCBptLIagQayECKyAbO0PklOAklXAAQqEkRJVwQASSJZgQIITBUSRFcGAEkVSYEEDEEAW08DSCJBAEpPAkiBBEsBD4EESwJPAk1MUicNgCpUaGVyZSBhcmUgdm90ZXJzIGFzc2lnbmVkIHRvIHRoaXMgcHJvcG9zYWxPAo4CAAIAAQAAAEiAABJEiARUI0NPA1cGBCcOEkL/njYaAUkVJRJEF0kiKGVEFERJiAOuREmIA7UxABJEsbIYgARzcTIashqBBrIQIrIBs7Q+RwJXAAQqEkRJVwQASSJZgQIITBUSRFcGAEkVSYEEDEEAK08CSCJBABpPAkiBBEsBD4EESwJPAk1MUicNTI4BAAEAAEiAABJEiAPKI0NPAlcGBCcOEkL/zjEWIwlJOBAjEkRJOAcyChJEIicEZURMOAgIJwRMZyNDNhoBSRUlEkQXiALTRCInBGVESg5EMQEyAIECCw9ESwEJJwRMZ7EiJwdlRLIHsggjshAisgGzI0M2GgFJFSUSRBeIAqREMQEyAIECCw9EiALqSwEPRLEiJwllRLIHsggjshAisgGzI0OIAtAWKkxQsCNDIihlRCInCmVEIicHZUQiJwllRCInGWVEIicPZUQiJxBlRCInEWVEIicSZUQiJxNlRCInFGVEIicVZUQiJxplRCInG2VEIiccZUQiJx1lRCInHmVEIicfZURPAhZPAhZQTBZQIicgZUQiJyFlRCInImVEIicjZURPAxZPAxZQTwIWUEwWUCInJGVEIiclZUQiJyZlRCInJ2VETwMWTwMWUE8CFlBMFlAiJyhlRCInKWVEIicqZURPAhZPAhZQTBZQIicrZUQiJyxlRCInLWVETwIWTwIWUEwWUCInBGVEIicIZUQiJzVlRCInLmVEIicvZUQiJxZlRCInMWVEIicyZUQiJzNlRCcGIk8eVCNPHVRPG1BPGlBPGVBPGFBPF1BPFlBPFVBPFBZQTxMWUE8SFlBPERZQTxAWUE8PFlBPDlBPDVBPDFBPC1BPClBPCRZQTwgWUE8HUE8GFlBPBRZQTwQWUE8DFlBPAhZQTBZQKkxQsCNDNhoBSRUkEkQpTFBJvUlPAkhBABBMvkQnBiJPA1RQKkxQsCNDRQGAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQv+0NhoBSRUkEkQrTFBJvUlPAkhBABBMvkQnBiJPA1RQKkxQsCNDRQEnNEL/7DYaAUkVJRJEFxYnF0xQSb1JTwJIQQAQTL5EJwYiTwNUUCpMULAjQ0UBJzdC/+w2GgFJFSUSRBcWJxhMUEm9SU8CSEEAEEy+RCcGIk8DVFAqTFCwI0NFASc3Qv/sNhoBSRUlEkQXiAA8RCNDMQAiJwdlRBKJMQAiJwllRBKJMQAiJw9lRBKJigEBMQCL/xJAAA8xACmL/1C+RFcAIBJBAAIjiSKJigEBi/9yB0QyChKJigEBi/+ACHByb3Bvc2VyZURJFSQSRIkyCnMARDIKcwFECSInBGVESg1ECYmKAQGL/zgHMgoSQQAPi/84CCInE2VEEkEAAiOJIomKAQEri/9QSb5EI1NBAA+LAL5EI1syBw1BAAMjTIkiQv/6MgYiJzFlREsBTBgJiYoBACInCGVEIwknCExni/+I/3QrTFBJIiO6IklUIky7iYoCACmL/lBJvUUBFEQiJxZlRDIGTBaL/0xQIhZQTBZQvyInC2VEIwgnC0xnMgaL/ov/UEwWUIAEJB/cUUxQsImKAQApi/9QSb1FAUS8SCInC2VEIwknC0xnMgYWi/9MUIAEe6JYA0xQsIk=", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 10, "patch": 1 } }, "events": [ { "name": "XGovSubscribed", "args": [ { "type": "address", "name": "xgov" }, { "type": "address", "name": "delegate" }, { "type": "uint64", "name": "round" } ], "desc": "An xGov subscribed (either through self-onboarding or managed onboarding)" }, { "name": "XGovUnsubscribed", "args": [ { "type": "address", "name": "xgov" }, { "type": "uint64", "name": "round" } ], "desc": "An xGov unsubscribed (either through self-onboarding or managed onboarding)" }, { "name": "ProposerSubscribed", "args": [ { "type": "address", "name": "proposer" }, { "type": "uint64", "name": "round" } ], "desc": "A Proposer subscribed" }, { "name": "ProposerKYC", "args": [ { "type": "address", "name": "proposer" }, { "type": "bool", "name": "valid_kyc" }, { "type": "uint64", "name": "round" } ], "desc": "A Proposer KYC status update" }, { "name": "NewCommittee", "args": [ { "type": "byte[32]", "name": "committee_id" }, { "type": "uint32", "name": "size" }, { "type": "uint32", "name": "votes" }, { "type": "uint64", "name": "round" } ], "desc": "A new xGov Committee has been elected" }, { "name": "NewProposal", "args": [ { "type": "uint64", "name": "proposal_id" }, { "type": "address", "name": "proposer" }, { "type": "uint64", "name": "round" } ], "desc": "A new Proposal has been opened" } ], "templateVariables": { "entropy": { "type": "AVMBytes" } } }