{
  "_format": "hh-sol-artifact-1",
  "contractName": "BVM_EigenDataLayrChain",
  "sourceName": "contracts/da/BVM_EigenDataLayrChain.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldDataLayrManagerAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newDataLayrManagerAddress",
          "type": "address"
        }
      ],
      "name": "DataLayrManagerAddressUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldFraudProofPeriod",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newFraudProofPeriod",
          "type": "uint256"
        }
      ],
      "name": "FraudProofPeriodUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldL2ConfirmedBlockNumber",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newL2ConfirmedBlockNumber",
          "type": "uint256"
        }
      ],
      "name": "L2ConfirmedBlockNumberUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "reRollupIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "rollupBatchIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "stratL2BlockNumber",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "endL2BlockNumber",
          "type": "uint256"
        }
      ],
      "name": "ReRollupBatchData",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldReSubmitterAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newReSubmitterAddress",
          "type": "address"
        }
      ],
      "name": "ReSubmitterAddressUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "rollupBatchIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "l2StoredBlockNumber",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "l2ConfirmedBlockNumber",
          "type": "uint256"
        }
      ],
      "name": "ResetRollupBatchData",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldRollupBatchIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newRollupBatchIndex",
          "type": "uint256"
        }
      ],
      "name": "RollupBatchIndexUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "rollupBatchIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "dataStoreId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "stratL2BlockNumber",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "endL2BlockNumber",
          "type": "uint256"
        }
      ],
      "name": "RollupStoreConfirmed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "dataStoreId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "stratL2BlockNumber",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "endL2BlockNumber",
          "type": "uint256"
        }
      ],
      "name": "RollupStoreInitialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "rollupBatchIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "dataStoreId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "stratL2BlockNumber",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "endL2BlockNumber",
          "type": "uint256"
        }
      ],
      "name": "RollupStoreReverted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldSequencerAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newSequencerAddress",
          "type": "address"
        }
      ],
      "name": "SequencerAddressUpdated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "BLOCK_STALE_MEASURE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "FRAUD_STRING",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "headerHash",
                  "type": "bytes32"
                },
                {
                  "internalType": "uint32",
                  "name": "durationDataStoreId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "globalDataStoreId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "referenceBlockNumber",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "blockNumber",
                  "type": "uint32"
                },
                {
                  "internalType": "uint96",
                  "name": "fee",
                  "type": "uint96"
                },
                {
                  "internalType": "address",
                  "name": "confirmer",
                  "type": "address"
                },
                {
                  "internalType": "bytes32",
                  "name": "signatoryRecordHash",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct IDataLayrServiceManager.DataStoreMetadata",
              "name": "metadata",
              "type": "tuple"
            },
            {
              "internalType": "uint8",
              "name": "duration",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "timestamp",
              "type": "uint256"
            },
            {
              "internalType": "uint32",
              "name": "index",
              "type": "uint32"
            }
          ],
          "internalType": "struct IDataLayrServiceManager.DataStoreSearchData",
          "name": "searchData",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "startL2Block",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "endL2Block",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "originDataStoreId",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "reConfirmedBatchIndex",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "isReRollup",
          "type": "bool"
        }
      ],
      "name": "confirmData",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "dataManageAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "dataStoreIdToL2RollUpBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "startL2BlockNumber",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "endBL2BlockNumber",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "isReRollup",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "dataStoreIdToRollupStoreNumber",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fraudProofPeriod",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getL2ConfirmedBlockNumber",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_dataStoreId",
          "type": "uint32"
        }
      ],
      "name": "getL2RollUpBlockByDataStoreId",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "startL2BlockNumber",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "endBL2BlockNumber",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "isReRollup",
              "type": "bool"
            }
          ],
          "internalType": "struct BVM_EigenDataLayrChain.BatchRollupBlock",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getL2StoredBlockNumber",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_rollupBatchIndex",
          "type": "uint256"
        }
      ],
      "name": "getRollupStoreByRollupBatchIndex",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "originDataStoreId",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "dataStoreId",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "confirmAt",
              "type": "uint32"
            },
            {
              "internalType": "enum BVM_EigenDataLayrChain.RollupStoreStatus",
              "name": "status",
              "type": "uint8"
            }
          ],
          "internalType": "struct BVM_EigenDataLayrChain.RollupStore",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_sequencer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_dataManageAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_reSubmitterAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_block_stale_measure",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_fraudProofPeriod",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_l2SubmittedBlockNumber",
          "type": "uint256"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2ConfirmedBlockNumber",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2StoredBlockNumber",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "polys",
          "type": "bytes[]"
        },
        {
          "internalType": "uint256",
          "name": "startIndex",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "parse",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "provenString",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "fraudulentStoreNumber",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "startIndex",
          "type": "uint256"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "headerHash",
                  "type": "bytes32"
                },
                {
                  "internalType": "uint32",
                  "name": "durationDataStoreId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "globalDataStoreId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "referenceBlockNumber",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "blockNumber",
                  "type": "uint32"
                },
                {
                  "internalType": "uint96",
                  "name": "fee",
                  "type": "uint96"
                },
                {
                  "internalType": "address",
                  "name": "confirmer",
                  "type": "address"
                },
                {
                  "internalType": "bytes32",
                  "name": "signatoryRecordHash",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct IDataLayrServiceManager.DataStoreMetadata",
              "name": "metadata",
              "type": "tuple"
            },
            {
              "internalType": "uint8",
              "name": "duration",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "timestamp",
              "type": "uint256"
            },
            {
              "internalType": "uint32",
              "name": "index",
              "type": "uint32"
            }
          ],
          "internalType": "struct IDataLayrServiceManager.DataStoreSearchData",
          "name": "searchData",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "header",
              "type": "bytes"
            },
            {
              "internalType": "uint32",
              "name": "firstChunkNumber",
              "type": "uint32"
            },
            {
              "internalType": "bytes[]",
              "name": "polys",
              "type": "bytes[]"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "X",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "Y",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct BN254.G1Point",
                  "name": "interpolationPoly",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "X",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "Y",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct BN254.G1Point",
                  "name": "revealProof",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "uint256[2]",
                      "name": "X",
                      "type": "uint256[2]"
                    },
                    {
                      "internalType": "uint256[2]",
                      "name": "Y",
                      "type": "uint256[2]"
                    }
                  ],
                  "internalType": "struct BN254.G2Point",
                  "name": "zeroPoly",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "zeroPolyProof",
                  "type": "bytes"
                }
              ],
              "internalType": "struct DataLayrDisclosureLogic.MultiRevealProof[]",
              "name": "multiRevealProofs",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "uint256[2]",
                  "name": "X",
                  "type": "uint256[2]"
                },
                {
                  "internalType": "uint256[2]",
                  "name": "Y",
                  "type": "uint256[2]"
                }
              ],
              "internalType": "struct BN254.G2Point",
              "name": "polyEquivalenceProof",
              "type": "tuple"
            }
          ],
          "internalType": "struct BVM_EigenDataLayrChain.DisclosureProofs",
          "name": "disclosureProofs",
          "type": "tuple"
        }
      ],
      "name": "proveFraud",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "reRollupBatchIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "reRollupIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "reSubmitterAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_address",
          "type": "address"
        }
      ],
      "name": "removeFraudProofAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_rollupBatchIndex",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_l2StoredBlockNumber",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_l2ConfirmedBlockNumber",
          "type": "uint256"
        }
      ],
      "name": "resetRollupBatchData",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rollupBatchIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "rollupBatchIndexRollupStores",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "originDataStoreId",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "dataStoreId",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "confirmAt",
          "type": "uint32"
        },
        {
          "internalType": "enum BVM_EigenDataLayrChain.RollupStoreStatus",
          "name": "status",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "sequencer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_address",
          "type": "address"
        }
      ],
      "name": "setFraudProofAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "header",
          "type": "bytes"
        },
        {
          "internalType": "uint8",
          "name": "duration",
          "type": "uint8"
        },
        {
          "internalType": "uint32",
          "name": "blockNumber",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "startL2Block",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "endL2Block",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "totalOperatorsIndex",
          "type": "uint32"
        },
        {
          "internalType": "bool",
          "name": "isReRollup",
          "type": "bool"
        }
      ],
      "name": "storeData",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "batchIndex",
          "type": "uint256"
        }
      ],
      "name": "submitReRollUpInfo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_dataManageAddress",
          "type": "address"
        }
      ],
      "name": "updateDataLayrManagerAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_fraudProofPeriod",
          "type": "uint256"
        }
      ],
      "name": "updateFraudProofPeriod",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_l2ConfirmedBlockNumber",
          "type": "uint256"
        }
      ],
      "name": "updateL2ConfirmedBlockNumber",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_l2StoredBlockNumber",
          "type": "uint256"
        }
      ],
      "name": "updateL2StoredBlockNumber",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_reSubmitterAddress",
          "type": "address"
        }
      ],
      "name": "updateReSubmitterAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_rollupBatchIndex",
          "type": "uint256"
        }
      ],
      "name": "updateRollupBatchIndex",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_sequencer",
          "type": "address"
        }
      ],
      "name": "updateSequencerAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6155d280620000f46000396000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c8063728cdbca11610160578063afab4ac5116100d8578063d7fbc2e21161008c578063f2a8f12411610071578063f2a8f124146105e9578063f2fde38b146105f2578063ff2e07491461060557600080fd5b8063d7fbc2e2146105b6578063f2495029146105c957600080fd5b8063c24f03f4116100bd578063c24f03f414610559578063c8fff01b1461056c578063c96c0d381461057f57600080fd5b8063afab4ac514610526578063b537c4c71461053957600080fd5b8063927f20321161012f5780639495de40116101145780639495de40146104f7578063990fca661461050a5780639a71e29c1461051357600080fd5b8063927f20321461049f57806392f30a45146104a857600080fd5b8063728cdbca14610446578063758b8147146104595780638bea6cae146104795780638da5cb5b1461048157600080fd5b80634618ed87116101f35780635c1bba38116101c25780635e4a3056116101a75780635e4a3056146104225780635e8b3f2d14610435578063715018a61461043e57600080fd5b80635c1bba38146103d45780635d42ffb71461041957600080fd5b80634618ed871461034157806346b2eb9b146103545780634a4232de1461035c57806359cb63911461036f57600080fd5b80632e64b4c01161024a578063301b39ab1161022f578063301b39ab1461031357806332c58f7a146103255780633c7629841461033857600080fd5b80632e64b4c0146102e05780632e72866b146102f357600080fd5b806302d777de1461027c578063060ee9a41461029157806315fda737146102a45780631f944c8f146102b7575b600080fd5b61028f61028a366004614824565b610625565b005b61028f61029f366004614824565b6107ee565b61028f6102b2366004614a0e565b610976565b6102ca6102c5366004614a78565b61111d565b6040516102d79190614b2a565b60405180910390f35b61028f6102ee366004614b7b565b6112c2565b610306610301366004614b7b565b611354565b6040516102d79190614bfe565b609a545b6040519081526020016102d7565b61028f610333366004614824565b6113ed565b610317609d5481565b61028f61034f366004614c95565b611552565b6102ca611cb8565b61028f61036a366004614b7b565b611cd4565b6103c461037d366004614b7b565b609e6020526000908152604090205463ffffffff80821691640100000000810482169168010000000000000000820416906c01000000000000000000000000900460ff1684565b6040516102d79493929190614d30565b6097546103f49073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d7565b610317609b5481565b61028f610430366004614d63565b611d9f565b61031760995481565b61028f61216d565b61028f610454366004614df1565b612181565b60a2546103f49073ffffffffffffffffffffffffffffffffffffffff1681565b609b54610317565b60335473ffffffffffffffffffffffffffffffffffffffff166103f4565b61031760a35481565b6104da6104b6366004614e50565b609f6020526000908152604090208054600182015460029092015490919060ff1683565b6040805193845260208401929092521515908201526060016102d7565b61028f610505366004614b7b565b6125fc565b610317609a5481565b61028f610521366004614b7b565b6126c7565b61028f610534366004614824565b6128ab565b610317610547366004614e50565b60a06020526000908152604090205481565b61028f610567366004614e6d565b612a66565b61028f61057a366004614824565b612b9b565b61059261058d366004614e50565b612cab565b604080518251815260208084015190820152918101511515908201526060016102d7565b61028f6105c4366004614b7b565b612d15565b6098546103f49073ffffffffffffffffffffffffffffffffffffffff1681565b610317609c5481565b61028f610600366004614824565b612f1c565b610317610613366004614b7b565b60a46020526000908152604090205481565b60975473ffffffffffffffffffffffffffffffffffffffff1633146106b75760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166107675760405162461bcd60e51b8152602060048201526044602482018190527f757064617465446174614c6179724d616e61676572416464726573733a205f64908201527f6174614d616e6167654164647265737320697320746865207a65726f2061646460648201527f7265737300000000000000000000000000000000000000000000000000000000608482015260a4016106ae565b6098805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f7dc2cdf7b45e41e53cedea7a30250d948690332e87d86f5eff45acd42ab259a291015b60405180910390a15050565b60975473ffffffffffffffffffffffffffffffffffffffff16331461087b5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b73ffffffffffffffffffffffffffffffffffffffff811661092a5760405162461bcd60e51b815260206004820152604d60248201527f72656d6f7665467261756450726f6f66416464726573733a2072656d6f76654660448201527f7261756450726f6f66416464726573733a20616464726573732069732074686560648201527f207a65726f206164647265737300000000000000000000000000000000000000608482015260a4016106ae565b73ffffffffffffffffffffffffffffffffffffffff16600090815260a16020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b33600090815260a1602052604090205460ff166109fb5760405162461bcd60e51b815260206004820152603a60248201527f70726f766546726175643a204f6e6c792066726175642070726f6f662077686960448201527f7465206c6973742063616e206368616c6c656e6765206461746100000000000060648201526084016106ae565b6000848152609e602090815260408083208151608081018352815463ffffffff8082168352640100000000820481169583019590955268010000000000000000810490941692810192909252909160608301906c01000000000000000000000000900460ff166002811115610a7257610a72614b94565b6002811115610a8357610a83614b94565b9052509050600181606001516002811115610aa057610aa0614b94565b148015610ab6575042816040015163ffffffff16115b610b285760405162461bcd60e51b815260206004820152602d60248201527f526f6c6c757053746f7265206d75737420626520636f6d6d697474656420616e60448201527f6420756e636f6e6669726d65640000000000000000000000000000000000000060648201526084016106ae565b8251610b3390612fb9565b6098546020850151604080870151606088015191517fed82c0ee00000000000000000000000000000000000000000000000000000000815260ff9093166004840152602483015263ffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091169063ed82c0ee9060640160206040518083038186803b158015610bbf57600080fd5b505afa158015610bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf79190614e99565b14610c6a5760405162461bcd60e51b815260206004820152602a60248201527f70726f766546726175643a206d6574616461746120707265696d61676520697360448201527f20696e636f72726563740000000000000000000000000000000000000000000060648201526084016106ae565b806020015163ffffffff1683600001516040015163ffffffff1614610d1d5760405162461bcd60e51b815260206004820152604260248201527f7365616368446174612773206461746173746f7265206964206973206e6f742060448201527f636f6e73697374656e74207769746820676976656e20726f6c6c75702073746f60648201527f7265000000000000000000000000000000000000000000000000000000000000608482015260a4016106ae565b610d278280614eb2565b604051610d35929190614f17565b60405190819003902083515114610db45760405162461bcd60e51b815260206004820152603260248201527f646973636c6f737572652070726f6f667320686561646572686173682070726560448201527f696d61676520697320696e636f7272656374000000000000000000000000000060648201526084016106ae565b610df4610dc18380614eb2565b610dd16040860160208701614e50565b610dde6040870187614f27565b610deb6060890189614f27565b896080016130e6565b610e405760405162461bcd60e51b815260206004820152601d60248201527f646973636c6f737572652070726f6f66732061726520696e76616c696400000060448201526064016106ae565b6000610e54610e4f8480614eb2565b6136de565b905063ffffffff8116610e6a6040850185614f27565b9050610e7c6040860160208701614e50565b63ffffffff16610e8c9190614fbe565b1115610f005760405162461bcd60e51b815260206004820152602e60248201527f43616e206f6e6c792070726f766520646174612066726f6d207468652073797360448201527f74656d61746963206368756e6b7300000000000000000000000000000000000060648201526084016106ae565b6000610f32610f126040860186614f27565b8860405180606001604052806032815260200161556b603291395161111d565b905060405180606001604052806032815260200161556b6032913951815114610fe95760405162461bcd60e51b815260206004820152604260248201527f50617273696e67206572726f722c2070726f76656e20737472696e672069732060448201527f646966666572656e74206c656e677468207468616e206672617564207374726960648201527f6e67000000000000000000000000000000000000000000000000000000000000608482015260a4016106ae565b60405180606001604052806032815260200161556b603291398051906020012081805190602001201461105e5760405162461bcd60e51b815260206004820152601d60248201527f70726f76656e20737472696e6720213d20667261756420737472696e6700000060448201526064016106ae565b6000878152609e6020908152604080832080547fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff166c02000000000000000000000000179055875181015163ffffffff908116808552609f8452828520548a518401519092168552938290206001015482518c8152938401949094529082015260608101919091527fca227c67a02028763083580d42e8bdef4bb49c393068d05983421cd7a4a2a5be906080015b60405180910390a150505050505050565b606061112a602084615005565b61119c5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742073746172742072656164696e672066726f6d2061207061646460448201527f656420627974650000000000000000000000000000000000000000000000000060648201526084016106ae565b6000835b83835110156112b85760006111eb826111ba602082615019565b6111c5906001614fbe565b6111d090602061502d565b6111da919061506a565b85516111e6908861506a565b6136ed565b90508388888581811061120057611200615081565b90506020028101906112129190614eb2565b849061121e8583614fbe565b9261122b939291906150b0565b60405160200161123d939291906150da565b604051602081830303815290604052935087878481811061126057611260615081565b90506020028101906112729190614eb2565b905061127e8284614fbe565b141561129a578261128e81615102565b935050600191506112b2565b6112a5816001614fbe565b6112af9083614fbe565b91505b506111a0565b5050949350505050565b60975473ffffffffffffffffffffffffffffffffffffffff16331461134f5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b609b55565b61135c614721565b6000828152609e60209081526040918290208251608081018452815463ffffffff80821683526401000000008204811694830194909452680100000000000000008104909316938101939093529060608301906c01000000000000000000000000900460ff1660028111156113d3576113d3614b94565b60028111156113e4576113e4614b94565b90525092915050565b60975473ffffffffffffffffffffffffffffffffffffffff16331461147a5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b73ffffffffffffffffffffffffffffffffffffffff81166115035760405162461bcd60e51b815260206004820152603160248201527f736574467261756450726f6f66416464726573733a206164647265737320697360448201527f20746865207a65726f206164647265737300000000000000000000000000000060648201526084016106ae565b73ffffffffffffffffffffffffffffffffffffffff16600090815260a16020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60975473ffffffffffffffffffffffffffffffffffffffff1633146115df5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b8484116116545760405162461bcd60e51b815260206004820152603360248201527f636f6e6669726d446174613a20656e644c32426c6f636b206d757374206d6f7260448201527f65207468616e2073746172744c32426c6f636b0000000000000000000000000060648201526084016106ae565b855160409081015163ffffffff166000908152609f6020908152908290208251606081018452815480825260018301549382019390935260029091015460ff16151592810192909252861480156116ae5750848160200151145b80156116c1575081151581604001511515145b61177f5760405162461bcd60e51b815260206004820152606260248201527f636f6e6669726d446174613a20446174612073746f726520656974686572207760448201527f6173206e6f7420696e697469616c697a65642062792074686520726f6c6c757060648201527f20636f6e74726163742c206f7220697320616c726561647920636f6e6669726d60848201527f656400000000000000000000000000000000000000000000000000000000000060a482015260c4016106ae565b865160409081015163ffffffff16600090815260a060205220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146118795760405162461bcd60e51b815260206004820152606260248201527f636f6e6669726d446174613a20446174612073746f726520656974686572207760448201527f6173206e6f7420696e697469616c697a65642062792074686520726f6c6c757060648201527f20636f6e74726163742c206f7220697320616c726561647920636f6e6669726d60848201527f656400000000000000000000000000000000000000000000000000000000000060a482015260c4016106ae565b6098546040517f58942e7300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906358942e73906118d3908c908c908c90600401615184565b600060405180830381600087803b1580156118ed57600080fd5b505af1158015611901573d6000803e3d6000fd5b5050505081611aeb5760408051608081018252885182015163ffffffff90811682528951830151166020820152609c5490918201906119409042614fbe565b63ffffffff16815260200160019052609d546000908152609e602090815260409182902083518154928501519385015163ffffffff90811668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff958216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009095169190921617929092179283168217815560608401519092909183917fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffff909116176c01000000000000000000000000836002811115611a5657611a56614b94565b02179055505050609b859055609d8054885160409081015163ffffffff16600090815260a06020529081208290557fc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f6729290611ab083615102565b909155508851604090810151815163ffffffff93841681529216602083015281018890526060810187905260800160405180910390a1611cad565b60405180608001604052808563ffffffff16815260200188600001516040015163ffffffff168152602001609c5442611b249190614fbe565b63ffffffff168152602001600190526000848152609e602090815260409182902083518154928501519385015163ffffffff90811668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff958216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009095169190921617929092179283168217815560608401519092909183917fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffff909116176c01000000000000000000000000836002811115611c3757611c37614b94565b021790555050875160409081015163ffffffff908116600090815260a06020908152908390208790558a518301518351888152921690820152908101889052606081018790527fc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f67291506080015b60405180910390a15b505050505050505050565b60405180606001604052806032815260200161556b6032913981565b60975473ffffffffffffffffffffffffffffffffffffffff163314611d615760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b609d80549082905560408051828152602081018490527f84d29a10fee283002b5c77232e8d38a21f0a3f16190de1693f837ac60bfbe2bb91016107e2565b60975473ffffffffffffffffffffffffffffffffffffffff163314611e2c5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b838311611ea15760405162461bcd60e51b815260206004820152603160248201527f73746f7265446174613a20656e644c32426c6f636b206d757374206d6f72652060448201527f7468616e2073746172744c32426c6f636b00000000000000000000000000000060648201526084016106ae565b609954611eb463ffffffff87164361506a565b10611f275760405162461bcd60e51b815260206004820152602960248201527f73746f7265446174613a207374616b65732074616b656e2066726f6d20746f6f60448201527f206c6f6e672061676f000000000000000000000000000000000000000000000060648201526084016106ae565b609854604080517f72d18e8d000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916372d18e8d916004808301926020929190829003018186803b158015611f9257600080fd5b505afa158015611fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fca9190615261565b9050609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf49ea733308a8a888f8f6040518863ffffffff1660e01b8152600401612033979695949392919061527e565b602060405180830381600087803b15801561204d57600080fd5b505af1158015612061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120859190615261565b5060408051606081018252868152602080820187815285151583850190815263ffffffff86166000908152609f8452858120945185559151600185015551600290930180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169315159390931790925560a09052207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90558161212957609a8490555b6040805163ffffffff83168152602081018790529081018590527fa99ca06ac3461399088feac88ec48dc5a47d61c3b6839eab20146f2c4ee5358490606001611ca4565b612175613705565b61217f600061376c565b565b600054610100900460ff16158080156121a15750600054600160ff909116105b806121bb5750303b1580156121bb575060005460ff166001145b61222d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106ae565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561228b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff87166123145760405162461bcd60e51b815260206004820152603860248201527f696e697469616c697a653a2063616e277420736574207a65726f20616464726560448201527f737320746f205f73657175656e6365722061646472657373000000000000000060648201526084016106ae565b73ffffffffffffffffffffffffffffffffffffffff861661239d5760405162461bcd60e51b815260206004820152603860248201527f696e697469616c697a653a2063616e277420736574207a65726f20616464726560448201527f737320746f205f646174614d616e61676541646472657373000000000000000060648201526084016106ae565b73ffffffffffffffffffffffffffffffffffffffff85166124265760405162461bcd60e51b815260206004820152603960248201527f696e697469616c697a653a2063616e277420736574207a65726f20616464726560448201527f737320746f205f72655375626d6974746572416464726573730000000000000060648201526084016106ae565b610e1083101561249e5760405162461bcd60e51b815260206004820152603b60248201527f696e697469616c697a653a205f667261756450726f6f66506572696f64206d7560448201527f7374206265206e6f206c657373207468616e206f6e6520686f7572000000000060648201526084016106ae565b6162708311156125165760405162461bcd60e51b815260206004820152603d60248201527f696e697469616c697a653a205f667261756450726f6f66506572696f64206d7560448201527f7374206265206e6f206d6f7265207468616e20736576656e20686f757200000060648201526084016106ae565b61251e6137e3565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556098805489841690831617905560a28054928816929091169190911790556099849055609c839055609a829055609b82905580156125f357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200161110c565b50505050505050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146126895760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b609a80549082905560408051828152602081018490527fd81cc97cc11cd748d88c14364de569a7d07c4aeaea3b5a0525ca4d504ec548a991016107e2565b60a25473ffffffffffffffffffffffffffffffffffffffff16331461277a5760405162461bcd60e51b815260206004820152604360248201527f7375626d69745265526f6c6c5570496e666f3a204f6e6c79207468652072652060448201527f7375626d69747465722063616e207375626d697420726520726f6c6c7570206460648201527f6174610000000000000000000000000000000000000000000000000000000000608482015260a4016106ae565b6000818152609e602090815260408083208151608081018352815463ffffffff8082168352640100000000820481169583019590955268010000000000000000810490941692810192909252909160608301906c01000000000000000000000000900460ff1660028111156127f1576127f1614b94565b600281111561280257612802614b94565b905250602081015190915063ffffffff16156128a75760a38054600090815260a46020526040812084905581547fee84ab0752d66e31e484f6855689d7067ecd900a6c5a198a2908f74e583e7d5792909161285c83615102565b909155506020838101805163ffffffff9081166000908152609f84526040808220549351909216815281902060010154815194855292840187905283015260608201526080016107e2565b5050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146129385760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b73ffffffffffffffffffffffffffffffffffffffff81166129e75760405162461bcd60e51b815260206004820152604160248201527f75706461746552655375626d6974746572416464726573733a205f726553756260448201527f6d69747465724164647265737320697320746865207a65726f2061646472657360648201527f7300000000000000000000000000000000000000000000000000000000000000608482015260a4016106ae565b60a2805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f84756a63b0b7003b255a685f66d60e972c20c2dd95acbc14c2e52fc1e91e6b3791016107e2565b60975473ffffffffffffffffffffffffffffffffffffffff163314612af35760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b825b609d54811015612b45576000818152609e6020526040902080547fffffffffffffffffffffffffffffffffffffff0000000000000000000000000016905580612b3d81615102565b915050612af5565b50609d839055609a829055609b81905560408051848152602081018490529081018290527f2ab33dc46b15db26167dd7494b560731e0b763349a879b2c5096d015489cdba49060600160405180910390a1505050565b612ba3613705565b73ffffffffffffffffffffffffffffffffffffffff8116612c2c5760405162461bcd60e51b815260206004820152603660248201527f75706461746553657175656e636572416464726573733a205f73657175656e6360448201527f657220697320746865207a65726f20616464726573730000000000000000000060648201526084016106ae565b6097805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527fe12a0ecca55e8af7ccbe853ac12e9d45a828685168f3e7c75edd4381b26e317191016107e2565b612cd1604051806060016040528060008152602001600081526020016000151581525090565b5063ffffffff166000908152609f60209081526040918290208251606081018452815481526001820154928101929092526002015460ff1615159181019190915290565b60975473ffffffffffffffffffffffffffffffffffffffff163314612da25760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b610e10811015612e405760405162461bcd60e51b815260206004820152604160248201527f757064617465467261756450726f6f66506572696f643a205f6672617564507260448201527f6f6f66506572696f64206e656564206d6f7265207468616e206f6e6520686f7560648201527f7200000000000000000000000000000000000000000000000000000000000000608482015260a4016106ae565b616270811115612ede5760405162461bcd60e51b815260206004820152604360248201527f757064617465467261756450726f6f66506572696f643a205f6672617564507260448201527f6f6f66506572696f64206e656564206c657373207468616e20736576656e206860648201527f6f75720000000000000000000000000000000000000000000000000000000000608482015260a4016106ae565b609c80549082905560408051828152602081018490527f52d7ac606181dee95c39c1f26eaf69c99d262a01c7665cdd62497c29989694ab91016107e2565b612f24613705565b73ffffffffffffffffffffffffffffffffffffffff8116612fad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106ae565b612fb68161376c565b50565b600080826000015183602001518460400151856060015186608001518760a001518860c001518960e001516040516020016130a998979695949392919097885260e096871b7fffffffff0000000000000000000000000000000000000000000000000000000090811660208a015295871b8616602489015293861b851660288801529190941b909216602c85015260a09290921b7fffffffffffffffffffffffff000000000000000000000000000000000000000016603084015260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016603c830152605082015260700190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209392505050565b6000808567ffffffffffffffff8111156131025761310261483f565b60405190808252806020026020018201604052801561312b578160200160208202803683370190505b50905060006131b88b8b6040805160c08101825260006080820181815260a0830182905282526020820181905291810182905260608101919091525050604080518082018252823581526020838101358183015282516080810184529182528383013560e090811c918301919091526044840135811c92820192909252604890920135901c606082015290565b90508460005b818110156134975761328e836131d4838e6152d5565b8a8a858181106131e6576131e6615081565b90506020028101906131f891906152fd565b8b8b8681811061320a5761320a615081565b905060200281019061321c91906152fd565b6040018c8c8781811061323157613231615081565b905060200281019061324391906152fd565b608001803603810190613256919061538b565b8d8d8881811061326857613268615081565b905060200281019061327a91906152fd565b61328990610100810190614eb2565b613868565b6133005760405162461bcd60e51b815260206004820152602260248201527f52657665616c206661696c65642064756520746f206e6f6e203120706169726960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016106ae565b89898281811061331257613312615081565b90506020028101906133249190614eb2565b90508360200151602061333791906153e8565b65ffffffffffff16146133b25760405162461bcd60e51b815260206004820152603860248201527f506f6c796e6f6d69616c206d757374206861766520612032353620626974206360448201527f6f656666696369656e7420666f722065616368207465726d000000000000000060648201526084016106ae565b8989828181106133c4576133c4615081565b90506020028101906133d69190614eb2565b6040516133e4929190614f17565b60405180910390208888838181106133fe576133fe615081565b905060200281019061341091906152fd565b3589898481811061342357613423615081565b905060200281019061343591906152fd565b60405161345c93929160209081013591019283526020830191909152604082015260600190565b6040516020818303038152906040528051906020012084828151811061348457613484615081565b60209081029190910101526001016131be565b5060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001846040516020016134cc9190615449565b6040516020818303038152906040528051906020012060001c6134ef9190615005565b90506134f9614749565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185600060405160200161352e929190615455565b6040516020818303038152906040528051906020012060001c6135519190615005565b808252602082015260008989828161356b5761356b615081565b905060200281019061357d91906152fd565b61358d903681900381019061546e565b905060006135bf8d8d60008181106135a7576135a7615081565b90506020028101906135b99190614eb2565b866139bf565b905060015b8a8110156136bc57613616836136118e8e858181106135e5576135e5615081565b90506020028101906135f791906152fd565b613607903681900381019061546e565b6020880151613a65565b613b0c565b925060006136478f8f8481811061362f5761362f615081565b90506020028101906136419190614eb2565b886139bf565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828760016020020151098408602086015186519194507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019109602086015250806136b481615102565b9150506135c4565b506136c9828a8684613bb0565b97505050505050505098975050505050505050565b604482013560e01c5b92915050565b60008183106136fc57816136fe565b825b9392505050565b60335473ffffffffffffffffffffffffffffffffffffffff16331461217f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106ae565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166138605760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106ae565b61217f613c8b565b600061392383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505060208b01516138b9915065ffffffffffff16613d11565b86516020808201519151818a01518083015190516040805194850195909552938301919091526060820152608081019190915260a001604051602081830303815290604052805190602001206139188b8d604001518e60600151614011565b63ffffffff1661417d565b61396f5760405162461bcd60e51b815260206004820181905260248201527f496e636f7272656374207a65726f20706f6c79206d65726b6c652070726f6f6660448201526064016106ae565b875160009061398f9061361161398a368b90038b018b61546e565b614195565b90506139b26139a33688900388018861546e565b86836139ad614254565b614314565b9998505050505050505050565b600080836001825b82811015613a595760008882896139df826020614fbe565b926139ec939291906150b0565b6139f5916154a0565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180848309860894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018784099250613a51602083614fbe565b9150506139c7565b50919695505050505050565b6040805180820190915260008082526020820152613a81614767565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015613ab457613ab6565bfe5b5080613b045760405162461bcd60e51b815260206004820152600d60248201527f65632d6d756c2d6661696c65640000000000000000000000000000000000000060448201526064016106ae565b505092915050565b6040805180820190915260008082526020820152613b28614785565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015613ab4575080613b045760405162461bcd60e51b815260206004820152600d60248201527f65632d6164642d6661696c65640000000000000000000000000000000000000060448201526064016106ae565b60408051808201909152600181526002602082015260009081613bdb613bd583614195565b86613a65565b604080518082019091527f220ac48bb1f91fd93f502a3d0caa077ac70e0af8819b9d8fa26a168a2c558a5781527f08f54b82af08ceaf7cd5f180bac94870f6d8100a9c9afa9dd09a4491653891126020820152909150613c3b8183613b0c565b91506000613c51613c4b85614195565b87613a65565b90506000613c5f8a83613b0c565b9050613c7d84613c74368c90038c018c61538b565b836139ad614254565b9a9950505050505050505050565b600054610100900460ff16613d085760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106ae565b61217f3361376c565b600080613d1d83614589565b905080613d4c57507fe82cea94884b1b895ea0742840a3b19249a723810fd1b04d8564d675b0a416f192915050565b8060011415613d7d57507f4843774a80fc8385b31024f5bd18b42e62de439206ab9468d42d826796d41f6792915050565b8060021415613dae57507f092d3e5f87f5293e7ab0cc2ca6b0b5e4adb5e0011656544915f7cea34e69e5ab92915050565b8060031415613ddf57507f494b208540ec8624fbbb3f2c64ffccdaf6253f8f4e50c0d93922d88195b0775592915050565b8060041415613e1057507ffdb44b84a82893cfa0e37a97f09ffc4298ad5e62be1bea1d03320ae836213d2292915050565b8060051415613e4157507f3f50cb08231d2a76853ba9dbb20dad45a1b75c57cdaff6223bfe069752cff3d492915050565b8060061415613e7257507fbb39eebd8138eefd5802a49d571e65b3e0d4e32277c28fbf5fbca66e7fb0431092915050565b8060071415613ea357507ff0a39b513e11fa80cbecbf352f69310eddd5cd03148768e0e9542bd600b133ec92915050565b8060081415613ed457507f038cca2238865414efb752cc004fffec9e6069b709f495249cdf36efbd5952f692915050565b8060091415613f0557507f2a26b054ed559dd255d8ac9060ebf6b95b768d87de767f8174ad2f9a4e48dd0192915050565b80600a1415613f3657507f1fe180d0bc4ff7c69fefa595b3b5f3c284535a280f6fdcf69b20770d1e20e1fc92915050565b80600b1415613f6757507f60e34ad57c61cd6fdd8177437c30e4a30334e63d7683989570cf27020efc820192915050565b80600c1415613f9857507feda2417e770ddbe88f083acf06b6794dfb76301314a32bd0697440d76f6cd9cc92915050565b80600d1415613fc957507f8cbe9b8cf92ce70e3bec8e1e72a0f85569017a7e43c3db50e4a5badb8dea7ce892915050565b60405162461bcd60e51b815260206004820152601660248201527f4c6f67206e6f7420696e2076616c69642072616e67650000000000000000000060448201526064016106ae565b60008061401e83856152d5565b905060006140318563ffffffff166145f9565b9050600061403f86846154dc565b63ffffffff1615614051576001614054565b60005b60ff1661406187856154ff565b61406b91906152d5565b9050600061408761407c8385615522565b63ffffffff166145f9565b90508663ffffffff168863ffffffff1610156140c957806140a8828a614626565b6140b490610100615522565b6140be91906154ff565b9450505050506136fe565b6140d38784615545565b6140dd9082615545565b63ffffffff168863ffffffff16101561410f57806140a881856141008b8d615545565b61410a91906152d5565b614626565b60405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420637265617465206e756d626572206f66206672616d6520686960448201527f67686572207468616e20706f737369626c65000000000000000000000000000060648201526084016106ae565b60008361418b868585614665565b1495945050505050565b604080518082019091526000808252602082015281511580156141ba57506020820151155b156141d8575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47846020015161421d9190615005565b614247907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761506a565b905292915050565b919050565b61425c6147a3565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6040805180820182528581526020808201859052825180840190935285835282018390526000916143436147c3565b60005b600281101561450857600061435c82600661502d565b905084826002811061437057614370615081565b60200201515183614382836000614fbe565b600c811061439257614392615081565b60200201528482600281106143a9576143a9615081565b602002015160200151838260016143c09190614fbe565b600c81106143d0576143d0615081565b60200201528382600281106143e7576143e7615081565b60200201515151836143fa836002614fbe565b600c811061440a5761440a615081565b602002015283826002811061442157614421615081565b602002015151600160200201518361443a836003614fbe565b600c811061444a5761444a615081565b602002015283826002811061446157614461615081565b60200201516020015160006002811061447c5761447c615081565b60200201518361448d836004614fbe565b600c811061449d5761449d615081565b60200201528382600281106144b4576144b4615081565b6020020151602001516001600281106144cf576144cf615081565b6020020151836144e0836005614fbe565b600c81106144f0576144f0615081565b6020020152508061450081615102565b915050614346565b506145116147e2565b60006020826101808560086107d05a03fa9050808015613ab45750806145795760405162461bcd60e51b815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c6564000000000000000000000060448201526064016106ae565b5051151598975050505050505050565b60008082116145da5760405162461bcd60e51b815260206004820152601360248201527f4c6f67206d75737420626520646566696e65640000000000000000000000000060448201526064016106ae565b60005b600183821c146136e757806145f181615102565b9150506145dd565b600060015b82816001901b101561461c578061461481615102565b9150506145fe565b6001901b92915050565b6000806146388463ffffffff16614589565b614643906020615545565b90508063ffffffff16614655846146d3565b63ffffffff16901c949350505050565b60008260205b855181116146ca5761467e600285615005565b61469f578160005280860151602052604060002091506002840493506146b8565b8086015160005281602052604060002091506002840493505b6146c3602082614fbe565b905061466b565b50949350505050565b600080805b602081101561471a576001811b84811663ffffffff1615614707576146fe82601f61506a565b6001901b831792505b508061471281615102565b9150506146d8565b5092915050565b604080516080810182526000808252602082018190529181018290529060608201905b905290565b60405180604001604052806002906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806147b6614749565b8152602001614744614749565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461424f57600080fd5b60006020828403121561483657600080fd5b6136fe82614800565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156148915761489161483f565b60405290565b604051610100810167ffffffffffffffff811182821017156148915761489161483f565b6040805190810167ffffffffffffffff811182821017156148915761489161483f565b63ffffffff81168114612fb657600080fd5b803561424f816148de565b80356bffffffffffffffffffffffff8116811461424f57600080fd5b803560ff8116811461424f57600080fd5b600081830361016081121561493c57600080fd5b61494461486e565b91506101008082121561495657600080fd5b61495e614897565b9150833582526020840135614972816148de565b6020830152614983604085016148f0565b6040830152614994606085016148f0565b60608301526149a5608085016148f0565b60808301526149b660a085016148fb565b60a08301526149c760c08501614800565b60c083015260e084013560e08301528183526149e4818501614917565b602084015250506101208201356040820152614a0361014083016148f0565b606082015292915050565b6000806000806101c08587031215614a2557600080fd5b8435935060208501359250614a3d8660408701614928565b91506101a085013567ffffffffffffffff811115614a5a57600080fd5b85016101008188031215614a6d57600080fd5b939692955090935050565b60008060008060608587031215614a8e57600080fd5b843567ffffffffffffffff80821115614aa657600080fd5b818701915087601f830112614aba57600080fd5b813581811115614ac957600080fd5b8860208260051b8501011115614ade57600080fd5b6020928301999098509187013596604001359550909350505050565b60005b83811015614b15578181015183820152602001614afd565b83811115614b24576000848401525b50505050565b6020815260008251806020840152614b49816040850160208701614afa565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215614b8d57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110614bfa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b600060808201905063ffffffff80845116835280602085015116602084015280604085015116604084015250606083015161471a6060840182614bc3565b60008083601f840112614c4e57600080fd5b50813567ffffffffffffffff811115614c6657600080fd5b602083019150836020828501011115614c7e57600080fd5b9250929050565b8035801515811461424f57600080fd5b600080600080600080600080610220898b031215614cb257600080fd5b883567ffffffffffffffff811115614cc957600080fd5b614cd58b828c01614c3c565b9099509750614ce990508a60208b01614928565b955061018089013594506101a089013593506101c0890135614d0a816148de565b92506101e08901359150614d216102008a01614c85565b90509295985092959890939650565b63ffffffff858116825284811660208301528316604082015260808101614d5a6060830184614bc3565b95945050505050565b60008060008060008060008060e0898b031215614d7f57600080fd5b883567ffffffffffffffff811115614d9657600080fd5b614da28b828c01614c3c565b9099509750614db5905060208a01614917565b95506040890135614dc5816148de565b9450606089013593506080890135925060a0890135614de3816148de565b9150614d2160c08a01614c85565b60008060008060008060c08789031215614e0a57600080fd5b614e1387614800565b9550614e2160208801614800565b9450614e2f60408801614800565b9350606087013592506080870135915060a087013590509295509295509295565b600060208284031215614e6257600080fd5b81356136fe816148de565b600080600060608486031215614e8257600080fd5b505081359360208301359350604090920135919050565b600060208284031215614eab57600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ee757600080fd5b83018035915067ffffffffffffffff821115614f0257600080fd5b602001915036819003821315614c7e57600080fd5b8183823760009101908152919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614f5c57600080fd5b83018035915067ffffffffffffffff821115614f7757600080fd5b6020019150600581901b3603821315614c7e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fd157614fd1614f8f565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261501457615014614fd6565b500690565b60008261502857615028614fd6565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561506557615065614f8f565b500290565b60008282101561507c5761507c614f8f565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080858511156150c057600080fd5b838611156150cd57600080fd5b5050820193919092039150565b600084516150ec818460208901614afa565b8201838582376000930192835250909392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561513457615134614f8f565b5060010190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000610180808352615199818401868861513b565b915050825180516020840152602081015163ffffffff8082166040860152806040840151166060860152806060840151166080860152505060808101516151e860a085018263ffffffff169052565b5060a08101516bffffffffffffffffffffffff1660c08481019190915281015173ffffffffffffffffffffffffffffffffffffffff1660e0808501919091520151610100830152602083015160ff16610120830152604083015161014083015260609092015163ffffffff166101609091015292915050565b60006020828403121561527357600080fd5b81516136fe816148de565b73ffffffffffffffffffffffffffffffffffffffff88811682528716602082015260ff8616604082015263ffffffff85811660608301528416608082015260c060a082018190526000906139b2908301848661513b565b600063ffffffff8083168185168083038211156152f4576152f4614f8f565b01949350505050565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee183360301811261533157600080fd5b9190910192915050565b600082601f83011261534c57600080fd5b6153546148bb565b80604084018581111561536657600080fd5b845b81811015615380578035845260209384019301615368565b509095945050505050565b60006080828403121561539d57600080fd5b6040516040810181811067ffffffffffffffff821117156153c0576153c061483f565b6040526153cd848461533b565b81526153dc846040850161533b565b60208201529392505050565b600065ffffffffffff8083168185168183048111821515161561540d5761540d614f8f565b02949350505050565b60008151602080840160005b8381101561543e57815187529582019590820190600101615422565b509495945050505050565b60006136fe8284615416565b60006154618285615416565b9283525050602001919050565b60006040828403121561548057600080fd5b6154886148bb565b82358152602083013560208201528091505092915050565b803560208310156136e7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b600063ffffffff808416806154f3576154f3614fd6565b92169190910692915050565b600063ffffffff8084168061551657615516614fd6565b92169190910492915050565b600063ffffffff8083168185168183048111821515161561540d5761540d614f8f565b600063ffffffff8381169083168181101561556257615562614f8f565b03939250505056fe2d2d5468697320697320612062616420737472696e672e204e6f626f64792073617973207468697320737472696e672e2d2da2646970667358221220f471c8e0027b094c8280aba0df2b09703d3c1f5fcbe827952a82b88da563c5ca64736f6c63430008090033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102775760003560e01c8063728cdbca11610160578063afab4ac5116100d8578063d7fbc2e21161008c578063f2a8f12411610071578063f2a8f124146105e9578063f2fde38b146105f2578063ff2e07491461060557600080fd5b8063d7fbc2e2146105b6578063f2495029146105c957600080fd5b8063c24f03f4116100bd578063c24f03f414610559578063c8fff01b1461056c578063c96c0d381461057f57600080fd5b8063afab4ac514610526578063b537c4c71461053957600080fd5b8063927f20321161012f5780639495de40116101145780639495de40146104f7578063990fca661461050a5780639a71e29c1461051357600080fd5b8063927f20321461049f57806392f30a45146104a857600080fd5b8063728cdbca14610446578063758b8147146104595780638bea6cae146104795780638da5cb5b1461048157600080fd5b80634618ed87116101f35780635c1bba38116101c25780635e4a3056116101a75780635e4a3056146104225780635e8b3f2d14610435578063715018a61461043e57600080fd5b80635c1bba38146103d45780635d42ffb71461041957600080fd5b80634618ed871461034157806346b2eb9b146103545780634a4232de1461035c57806359cb63911461036f57600080fd5b80632e64b4c01161024a578063301b39ab1161022f578063301b39ab1461031357806332c58f7a146103255780633c7629841461033857600080fd5b80632e64b4c0146102e05780632e72866b146102f357600080fd5b806302d777de1461027c578063060ee9a41461029157806315fda737146102a45780631f944c8f146102b7575b600080fd5b61028f61028a366004614824565b610625565b005b61028f61029f366004614824565b6107ee565b61028f6102b2366004614a0e565b610976565b6102ca6102c5366004614a78565b61111d565b6040516102d79190614b2a565b60405180910390f35b61028f6102ee366004614b7b565b6112c2565b610306610301366004614b7b565b611354565b6040516102d79190614bfe565b609a545b6040519081526020016102d7565b61028f610333366004614824565b6113ed565b610317609d5481565b61028f61034f366004614c95565b611552565b6102ca611cb8565b61028f61036a366004614b7b565b611cd4565b6103c461037d366004614b7b565b609e6020526000908152604090205463ffffffff80821691640100000000810482169168010000000000000000820416906c01000000000000000000000000900460ff1684565b6040516102d79493929190614d30565b6097546103f49073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d7565b610317609b5481565b61028f610430366004614d63565b611d9f565b61031760995481565b61028f61216d565b61028f610454366004614df1565b612181565b60a2546103f49073ffffffffffffffffffffffffffffffffffffffff1681565b609b54610317565b60335473ffffffffffffffffffffffffffffffffffffffff166103f4565b61031760a35481565b6104da6104b6366004614e50565b609f6020526000908152604090208054600182015460029092015490919060ff1683565b6040805193845260208401929092521515908201526060016102d7565b61028f610505366004614b7b565b6125fc565b610317609a5481565b61028f610521366004614b7b565b6126c7565b61028f610534366004614824565b6128ab565b610317610547366004614e50565b60a06020526000908152604090205481565b61028f610567366004614e6d565b612a66565b61028f61057a366004614824565b612b9b565b61059261058d366004614e50565b612cab565b604080518251815260208084015190820152918101511515908201526060016102d7565b61028f6105c4366004614b7b565b612d15565b6098546103f49073ffffffffffffffffffffffffffffffffffffffff1681565b610317609c5481565b61028f610600366004614824565b612f1c565b610317610613366004614b7b565b60a46020526000908152604090205481565b60975473ffffffffffffffffffffffffffffffffffffffff1633146106b75760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166107675760405162461bcd60e51b8152602060048201526044602482018190527f757064617465446174614c6179724d616e61676572416464726573733a205f64908201527f6174614d616e6167654164647265737320697320746865207a65726f2061646460648201527f7265737300000000000000000000000000000000000000000000000000000000608482015260a4016106ae565b6098805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f7dc2cdf7b45e41e53cedea7a30250d948690332e87d86f5eff45acd42ab259a291015b60405180910390a15050565b60975473ffffffffffffffffffffffffffffffffffffffff16331461087b5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b73ffffffffffffffffffffffffffffffffffffffff811661092a5760405162461bcd60e51b815260206004820152604d60248201527f72656d6f7665467261756450726f6f66416464726573733a2072656d6f76654660448201527f7261756450726f6f66416464726573733a20616464726573732069732074686560648201527f207a65726f206164647265737300000000000000000000000000000000000000608482015260a4016106ae565b73ffffffffffffffffffffffffffffffffffffffff16600090815260a16020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b33600090815260a1602052604090205460ff166109fb5760405162461bcd60e51b815260206004820152603a60248201527f70726f766546726175643a204f6e6c792066726175642070726f6f662077686960448201527f7465206c6973742063616e206368616c6c656e6765206461746100000000000060648201526084016106ae565b6000848152609e602090815260408083208151608081018352815463ffffffff8082168352640100000000820481169583019590955268010000000000000000810490941692810192909252909160608301906c01000000000000000000000000900460ff166002811115610a7257610a72614b94565b6002811115610a8357610a83614b94565b9052509050600181606001516002811115610aa057610aa0614b94565b148015610ab6575042816040015163ffffffff16115b610b285760405162461bcd60e51b815260206004820152602d60248201527f526f6c6c757053746f7265206d75737420626520636f6d6d697474656420616e60448201527f6420756e636f6e6669726d65640000000000000000000000000000000000000060648201526084016106ae565b8251610b3390612fb9565b6098546020850151604080870151606088015191517fed82c0ee00000000000000000000000000000000000000000000000000000000815260ff9093166004840152602483015263ffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091169063ed82c0ee9060640160206040518083038186803b158015610bbf57600080fd5b505afa158015610bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf79190614e99565b14610c6a5760405162461bcd60e51b815260206004820152602a60248201527f70726f766546726175643a206d6574616461746120707265696d61676520697360448201527f20696e636f72726563740000000000000000000000000000000000000000000060648201526084016106ae565b806020015163ffffffff1683600001516040015163ffffffff1614610d1d5760405162461bcd60e51b815260206004820152604260248201527f7365616368446174612773206461746173746f7265206964206973206e6f742060448201527f636f6e73697374656e74207769746820676976656e20726f6c6c75702073746f60648201527f7265000000000000000000000000000000000000000000000000000000000000608482015260a4016106ae565b610d278280614eb2565b604051610d35929190614f17565b60405190819003902083515114610db45760405162461bcd60e51b815260206004820152603260248201527f646973636c6f737572652070726f6f667320686561646572686173682070726560448201527f696d61676520697320696e636f7272656374000000000000000000000000000060648201526084016106ae565b610df4610dc18380614eb2565b610dd16040860160208701614e50565b610dde6040870187614f27565b610deb6060890189614f27565b896080016130e6565b610e405760405162461bcd60e51b815260206004820152601d60248201527f646973636c6f737572652070726f6f66732061726520696e76616c696400000060448201526064016106ae565b6000610e54610e4f8480614eb2565b6136de565b905063ffffffff8116610e6a6040850185614f27565b9050610e7c6040860160208701614e50565b63ffffffff16610e8c9190614fbe565b1115610f005760405162461bcd60e51b815260206004820152602e60248201527f43616e206f6e6c792070726f766520646174612066726f6d207468652073797360448201527f74656d61746963206368756e6b7300000000000000000000000000000000000060648201526084016106ae565b6000610f32610f126040860186614f27565b8860405180606001604052806032815260200161556b603291395161111d565b905060405180606001604052806032815260200161556b6032913951815114610fe95760405162461bcd60e51b815260206004820152604260248201527f50617273696e67206572726f722c2070726f76656e20737472696e672069732060448201527f646966666572656e74206c656e677468207468616e206672617564207374726960648201527f6e67000000000000000000000000000000000000000000000000000000000000608482015260a4016106ae565b60405180606001604052806032815260200161556b603291398051906020012081805190602001201461105e5760405162461bcd60e51b815260206004820152601d60248201527f70726f76656e20737472696e6720213d20667261756420737472696e6700000060448201526064016106ae565b6000878152609e6020908152604080832080547fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff166c02000000000000000000000000179055875181015163ffffffff908116808552609f8452828520548a518401519092168552938290206001015482518c8152938401949094529082015260608101919091527fca227c67a02028763083580d42e8bdef4bb49c393068d05983421cd7a4a2a5be906080015b60405180910390a150505050505050565b606061112a602084615005565b61119c5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742073746172742072656164696e672066726f6d2061207061646460448201527f656420627974650000000000000000000000000000000000000000000000000060648201526084016106ae565b6000835b83835110156112b85760006111eb826111ba602082615019565b6111c5906001614fbe565b6111d090602061502d565b6111da919061506a565b85516111e6908861506a565b6136ed565b90508388888581811061120057611200615081565b90506020028101906112129190614eb2565b849061121e8583614fbe565b9261122b939291906150b0565b60405160200161123d939291906150da565b604051602081830303815290604052935087878481811061126057611260615081565b90506020028101906112729190614eb2565b905061127e8284614fbe565b141561129a578261128e81615102565b935050600191506112b2565b6112a5816001614fbe565b6112af9083614fbe565b91505b506111a0565b5050949350505050565b60975473ffffffffffffffffffffffffffffffffffffffff16331461134f5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b609b55565b61135c614721565b6000828152609e60209081526040918290208251608081018452815463ffffffff80821683526401000000008204811694830194909452680100000000000000008104909316938101939093529060608301906c01000000000000000000000000900460ff1660028111156113d3576113d3614b94565b60028111156113e4576113e4614b94565b90525092915050565b60975473ffffffffffffffffffffffffffffffffffffffff16331461147a5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b73ffffffffffffffffffffffffffffffffffffffff81166115035760405162461bcd60e51b815260206004820152603160248201527f736574467261756450726f6f66416464726573733a206164647265737320697360448201527f20746865207a65726f206164647265737300000000000000000000000000000060648201526084016106ae565b73ffffffffffffffffffffffffffffffffffffffff16600090815260a16020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60975473ffffffffffffffffffffffffffffffffffffffff1633146115df5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b8484116116545760405162461bcd60e51b815260206004820152603360248201527f636f6e6669726d446174613a20656e644c32426c6f636b206d757374206d6f7260448201527f65207468616e2073746172744c32426c6f636b0000000000000000000000000060648201526084016106ae565b855160409081015163ffffffff166000908152609f6020908152908290208251606081018452815480825260018301549382019390935260029091015460ff16151592810192909252861480156116ae5750848160200151145b80156116c1575081151581604001511515145b61177f5760405162461bcd60e51b815260206004820152606260248201527f636f6e6669726d446174613a20446174612073746f726520656974686572207760448201527f6173206e6f7420696e697469616c697a65642062792074686520726f6c6c757060648201527f20636f6e74726163742c206f7220697320616c726561647920636f6e6669726d60848201527f656400000000000000000000000000000000000000000000000000000000000060a482015260c4016106ae565b865160409081015163ffffffff16600090815260a060205220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146118795760405162461bcd60e51b815260206004820152606260248201527f636f6e6669726d446174613a20446174612073746f726520656974686572207760448201527f6173206e6f7420696e697469616c697a65642062792074686520726f6c6c757060648201527f20636f6e74726163742c206f7220697320616c726561647920636f6e6669726d60848201527f656400000000000000000000000000000000000000000000000000000000000060a482015260c4016106ae565b6098546040517f58942e7300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906358942e73906118d3908c908c908c90600401615184565b600060405180830381600087803b1580156118ed57600080fd5b505af1158015611901573d6000803e3d6000fd5b5050505081611aeb5760408051608081018252885182015163ffffffff90811682528951830151166020820152609c5490918201906119409042614fbe565b63ffffffff16815260200160019052609d546000908152609e602090815260409182902083518154928501519385015163ffffffff90811668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff958216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009095169190921617929092179283168217815560608401519092909183917fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffff909116176c01000000000000000000000000836002811115611a5657611a56614b94565b02179055505050609b859055609d8054885160409081015163ffffffff16600090815260a06020529081208290557fc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f6729290611ab083615102565b909155508851604090810151815163ffffffff93841681529216602083015281018890526060810187905260800160405180910390a1611cad565b60405180608001604052808563ffffffff16815260200188600001516040015163ffffffff168152602001609c5442611b249190614fbe565b63ffffffff168152602001600190526000848152609e602090815260409182902083518154928501519385015163ffffffff90811668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff958216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009095169190921617929092179283168217815560608401519092909183917fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffff909116176c01000000000000000000000000836002811115611c3757611c37614b94565b021790555050875160409081015163ffffffff908116600090815260a06020908152908390208790558a518301518351888152921690820152908101889052606081018790527fc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f67291506080015b60405180910390a15b505050505050505050565b60405180606001604052806032815260200161556b6032913981565b60975473ffffffffffffffffffffffffffffffffffffffff163314611d615760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b609d80549082905560408051828152602081018490527f84d29a10fee283002b5c77232e8d38a21f0a3f16190de1693f837ac60bfbe2bb91016107e2565b60975473ffffffffffffffffffffffffffffffffffffffff163314611e2c5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b838311611ea15760405162461bcd60e51b815260206004820152603160248201527f73746f7265446174613a20656e644c32426c6f636b206d757374206d6f72652060448201527f7468616e2073746172744c32426c6f636b00000000000000000000000000000060648201526084016106ae565b609954611eb463ffffffff87164361506a565b10611f275760405162461bcd60e51b815260206004820152602960248201527f73746f7265446174613a207374616b65732074616b656e2066726f6d20746f6f60448201527f206c6f6e672061676f000000000000000000000000000000000000000000000060648201526084016106ae565b609854604080517f72d18e8d000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916372d18e8d916004808301926020929190829003018186803b158015611f9257600080fd5b505afa158015611fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fca9190615261565b9050609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf49ea733308a8a888f8f6040518863ffffffff1660e01b8152600401612033979695949392919061527e565b602060405180830381600087803b15801561204d57600080fd5b505af1158015612061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120859190615261565b5060408051606081018252868152602080820187815285151583850190815263ffffffff86166000908152609f8452858120945185559151600185015551600290930180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169315159390931790925560a09052207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90558161212957609a8490555b6040805163ffffffff83168152602081018790529081018590527fa99ca06ac3461399088feac88ec48dc5a47d61c3b6839eab20146f2c4ee5358490606001611ca4565b612175613705565b61217f600061376c565b565b600054610100900460ff16158080156121a15750600054600160ff909116105b806121bb5750303b1580156121bb575060005460ff166001145b61222d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106ae565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561228b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff87166123145760405162461bcd60e51b815260206004820152603860248201527f696e697469616c697a653a2063616e277420736574207a65726f20616464726560448201527f737320746f205f73657175656e6365722061646472657373000000000000000060648201526084016106ae565b73ffffffffffffffffffffffffffffffffffffffff861661239d5760405162461bcd60e51b815260206004820152603860248201527f696e697469616c697a653a2063616e277420736574207a65726f20616464726560448201527f737320746f205f646174614d616e61676541646472657373000000000000000060648201526084016106ae565b73ffffffffffffffffffffffffffffffffffffffff85166124265760405162461bcd60e51b815260206004820152603960248201527f696e697469616c697a653a2063616e277420736574207a65726f20616464726560448201527f737320746f205f72655375626d6974746572416464726573730000000000000060648201526084016106ae565b610e1083101561249e5760405162461bcd60e51b815260206004820152603b60248201527f696e697469616c697a653a205f667261756450726f6f66506572696f64206d7560448201527f7374206265206e6f206c657373207468616e206f6e6520686f7572000000000060648201526084016106ae565b6162708311156125165760405162461bcd60e51b815260206004820152603d60248201527f696e697469616c697a653a205f667261756450726f6f66506572696f64206d7560448201527f7374206265206e6f206d6f7265207468616e20736576656e20686f757200000060648201526084016106ae565b61251e6137e3565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556098805489841690831617905560a28054928816929091169190911790556099849055609c839055609a829055609b82905580156125f357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200161110c565b50505050505050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146126895760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b609a80549082905560408051828152602081018490527fd81cc97cc11cd748d88c14364de569a7d07c4aeaea3b5a0525ca4d504ec548a991016107e2565b60a25473ffffffffffffffffffffffffffffffffffffffff16331461277a5760405162461bcd60e51b815260206004820152604360248201527f7375626d69745265526f6c6c5570496e666f3a204f6e6c79207468652072652060448201527f7375626d69747465722063616e207375626d697420726520726f6c6c7570206460648201527f6174610000000000000000000000000000000000000000000000000000000000608482015260a4016106ae565b6000818152609e602090815260408083208151608081018352815463ffffffff8082168352640100000000820481169583019590955268010000000000000000810490941692810192909252909160608301906c01000000000000000000000000900460ff1660028111156127f1576127f1614b94565b600281111561280257612802614b94565b905250602081015190915063ffffffff16156128a75760a38054600090815260a46020526040812084905581547fee84ab0752d66e31e484f6855689d7067ecd900a6c5a198a2908f74e583e7d5792909161285c83615102565b909155506020838101805163ffffffff9081166000908152609f84526040808220549351909216815281902060010154815194855292840187905283015260608201526080016107e2565b5050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146129385760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b73ffffffffffffffffffffffffffffffffffffffff81166129e75760405162461bcd60e51b815260206004820152604160248201527f75706461746552655375626d6974746572416464726573733a205f726553756260448201527f6d69747465724164647265737320697320746865207a65726f2061646472657360648201527f7300000000000000000000000000000000000000000000000000000000000000608482015260a4016106ae565b60a2805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f84756a63b0b7003b255a685f66d60e972c20c2dd95acbc14c2e52fc1e91e6b3791016107e2565b60975473ffffffffffffffffffffffffffffffffffffffff163314612af35760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b825b609d54811015612b45576000818152609e6020526040902080547fffffffffffffffffffffffffffffffffffffff0000000000000000000000000016905580612b3d81615102565b915050612af5565b50609d839055609a829055609b81905560408051848152602081018490529081018290527f2ab33dc46b15db26167dd7494b560731e0b763349a879b2c5096d015489cdba49060600160405180910390a1505050565b612ba3613705565b73ffffffffffffffffffffffffffffffffffffffff8116612c2c5760405162461bcd60e51b815260206004820152603660248201527f75706461746553657175656e636572416464726573733a205f73657175656e6360448201527f657220697320746865207a65726f20616464726573730000000000000000000060648201526084016106ae565b6097805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527fe12a0ecca55e8af7ccbe853ac12e9d45a828685168f3e7c75edd4381b26e317191016107e2565b612cd1604051806060016040528060008152602001600081526020016000151581525090565b5063ffffffff166000908152609f60209081526040918290208251606081018452815481526001820154928101929092526002015460ff1615159181019190915290565b60975473ffffffffffffffffffffffffffffffffffffffff163314612da25760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b610e10811015612e405760405162461bcd60e51b815260206004820152604160248201527f757064617465467261756450726f6f66506572696f643a205f6672617564507260448201527f6f6f66506572696f64206e656564206d6f7265207468616e206f6e6520686f7560648201527f7200000000000000000000000000000000000000000000000000000000000000608482015260a4016106ae565b616270811115612ede5760405162461bcd60e51b815260206004820152604360248201527f757064617465467261756450726f6f66506572696f643a205f6672617564507260448201527f6f6f66506572696f64206e656564206c657373207468616e20736576656e206860648201527f6f75720000000000000000000000000000000000000000000000000000000000608482015260a4016106ae565b609c80549082905560408051828152602081018490527f52d7ac606181dee95c39c1f26eaf69c99d262a01c7665cdd62497c29989694ab91016107e2565b612f24613705565b73ffffffffffffffffffffffffffffffffffffffff8116612fad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106ae565b612fb68161376c565b50565b600080826000015183602001518460400151856060015186608001518760a001518860c001518960e001516040516020016130a998979695949392919097885260e096871b7fffffffff0000000000000000000000000000000000000000000000000000000090811660208a015295871b8616602489015293861b851660288801529190941b909216602c85015260a09290921b7fffffffffffffffffffffffff000000000000000000000000000000000000000016603084015260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016603c830152605082015260700190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209392505050565b6000808567ffffffffffffffff8111156131025761310261483f565b60405190808252806020026020018201604052801561312b578160200160208202803683370190505b50905060006131b88b8b6040805160c08101825260006080820181815260a0830182905282526020820181905291810182905260608101919091525050604080518082018252823581526020838101358183015282516080810184529182528383013560e090811c918301919091526044840135811c92820192909252604890920135901c606082015290565b90508460005b818110156134975761328e836131d4838e6152d5565b8a8a858181106131e6576131e6615081565b90506020028101906131f891906152fd565b8b8b8681811061320a5761320a615081565b905060200281019061321c91906152fd565b6040018c8c8781811061323157613231615081565b905060200281019061324391906152fd565b608001803603810190613256919061538b565b8d8d8881811061326857613268615081565b905060200281019061327a91906152fd565b61328990610100810190614eb2565b613868565b6133005760405162461bcd60e51b815260206004820152602260248201527f52657665616c206661696c65642064756520746f206e6f6e203120706169726960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016106ae565b89898281811061331257613312615081565b90506020028101906133249190614eb2565b90508360200151602061333791906153e8565b65ffffffffffff16146133b25760405162461bcd60e51b815260206004820152603860248201527f506f6c796e6f6d69616c206d757374206861766520612032353620626974206360448201527f6f656666696369656e7420666f722065616368207465726d000000000000000060648201526084016106ae565b8989828181106133c4576133c4615081565b90506020028101906133d69190614eb2565b6040516133e4929190614f17565b60405180910390208888838181106133fe576133fe615081565b905060200281019061341091906152fd565b3589898481811061342357613423615081565b905060200281019061343591906152fd565b60405161345c93929160209081013591019283526020830191909152604082015260600190565b6040516020818303038152906040528051906020012084828151811061348457613484615081565b60209081029190910101526001016131be565b5060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001846040516020016134cc9190615449565b6040516020818303038152906040528051906020012060001c6134ef9190615005565b90506134f9614749565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185600060405160200161352e929190615455565b6040516020818303038152906040528051906020012060001c6135519190615005565b808252602082015260008989828161356b5761356b615081565b905060200281019061357d91906152fd565b61358d903681900381019061546e565b905060006135bf8d8d60008181106135a7576135a7615081565b90506020028101906135b99190614eb2565b866139bf565b905060015b8a8110156136bc57613616836136118e8e858181106135e5576135e5615081565b90506020028101906135f791906152fd565b613607903681900381019061546e565b6020880151613a65565b613b0c565b925060006136478f8f8481811061362f5761362f615081565b90506020028101906136419190614eb2565b886139bf565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180828760016020020151098408602086015186519194507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019109602086015250806136b481615102565b9150506135c4565b506136c9828a8684613bb0565b97505050505050505098975050505050505050565b604482013560e01c5b92915050565b60008183106136fc57816136fe565b825b9392505050565b60335473ffffffffffffffffffffffffffffffffffffffff16331461217f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106ae565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166138605760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106ae565b61217f613c8b565b600061392383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505060208b01516138b9915065ffffffffffff16613d11565b86516020808201519151818a01518083015190516040805194850195909552938301919091526060820152608081019190915260a001604051602081830303815290604052805190602001206139188b8d604001518e60600151614011565b63ffffffff1661417d565b61396f5760405162461bcd60e51b815260206004820181905260248201527f496e636f7272656374207a65726f20706f6c79206d65726b6c652070726f6f6660448201526064016106ae565b875160009061398f9061361161398a368b90038b018b61546e565b614195565b90506139b26139a33688900388018861546e565b86836139ad614254565b614314565b9998505050505050505050565b600080836001825b82811015613a595760008882896139df826020614fbe565b926139ec939291906150b0565b6139f5916154a0565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180848309860894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018784099250613a51602083614fbe565b9150506139c7565b50919695505050505050565b6040805180820190915260008082526020820152613a81614767565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015613ab457613ab6565bfe5b5080613b045760405162461bcd60e51b815260206004820152600d60248201527f65632d6d756c2d6661696c65640000000000000000000000000000000000000060448201526064016106ae565b505092915050565b6040805180820190915260008082526020820152613b28614785565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015613ab4575080613b045760405162461bcd60e51b815260206004820152600d60248201527f65632d6164642d6661696c65640000000000000000000000000000000000000060448201526064016106ae565b60408051808201909152600181526002602082015260009081613bdb613bd583614195565b86613a65565b604080518082019091527f220ac48bb1f91fd93f502a3d0caa077ac70e0af8819b9d8fa26a168a2c558a5781527f08f54b82af08ceaf7cd5f180bac94870f6d8100a9c9afa9dd09a4491653891126020820152909150613c3b8183613b0c565b91506000613c51613c4b85614195565b87613a65565b90506000613c5f8a83613b0c565b9050613c7d84613c74368c90038c018c61538b565b836139ad614254565b9a9950505050505050505050565b600054610100900460ff16613d085760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106ae565b61217f3361376c565b600080613d1d83614589565b905080613d4c57507fe82cea94884b1b895ea0742840a3b19249a723810fd1b04d8564d675b0a416f192915050565b8060011415613d7d57507f4843774a80fc8385b31024f5bd18b42e62de439206ab9468d42d826796d41f6792915050565b8060021415613dae57507f092d3e5f87f5293e7ab0cc2ca6b0b5e4adb5e0011656544915f7cea34e69e5ab92915050565b8060031415613ddf57507f494b208540ec8624fbbb3f2c64ffccdaf6253f8f4e50c0d93922d88195b0775592915050565b8060041415613e1057507ffdb44b84a82893cfa0e37a97f09ffc4298ad5e62be1bea1d03320ae836213d2292915050565b8060051415613e4157507f3f50cb08231d2a76853ba9dbb20dad45a1b75c57cdaff6223bfe069752cff3d492915050565b8060061415613e7257507fbb39eebd8138eefd5802a49d571e65b3e0d4e32277c28fbf5fbca66e7fb0431092915050565b8060071415613ea357507ff0a39b513e11fa80cbecbf352f69310eddd5cd03148768e0e9542bd600b133ec92915050565b8060081415613ed457507f038cca2238865414efb752cc004fffec9e6069b709f495249cdf36efbd5952f692915050565b8060091415613f0557507f2a26b054ed559dd255d8ac9060ebf6b95b768d87de767f8174ad2f9a4e48dd0192915050565b80600a1415613f3657507f1fe180d0bc4ff7c69fefa595b3b5f3c284535a280f6fdcf69b20770d1e20e1fc92915050565b80600b1415613f6757507f60e34ad57c61cd6fdd8177437c30e4a30334e63d7683989570cf27020efc820192915050565b80600c1415613f9857507feda2417e770ddbe88f083acf06b6794dfb76301314a32bd0697440d76f6cd9cc92915050565b80600d1415613fc957507f8cbe9b8cf92ce70e3bec8e1e72a0f85569017a7e43c3db50e4a5badb8dea7ce892915050565b60405162461bcd60e51b815260206004820152601660248201527f4c6f67206e6f7420696e2076616c69642072616e67650000000000000000000060448201526064016106ae565b60008061401e83856152d5565b905060006140318563ffffffff166145f9565b9050600061403f86846154dc565b63ffffffff1615614051576001614054565b60005b60ff1661406187856154ff565b61406b91906152d5565b9050600061408761407c8385615522565b63ffffffff166145f9565b90508663ffffffff168863ffffffff1610156140c957806140a8828a614626565b6140b490610100615522565b6140be91906154ff565b9450505050506136fe565b6140d38784615545565b6140dd9082615545565b63ffffffff168863ffffffff16101561410f57806140a881856141008b8d615545565b61410a91906152d5565b614626565b60405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420637265617465206e756d626572206f66206672616d6520686960448201527f67686572207468616e20706f737369626c65000000000000000000000000000060648201526084016106ae565b60008361418b868585614665565b1495945050505050565b604080518082019091526000808252602082015281511580156141ba57506020820151155b156141d8575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47846020015161421d9190615005565b614247907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761506a565b905292915050565b919050565b61425c6147a3565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6040805180820182528581526020808201859052825180840190935285835282018390526000916143436147c3565b60005b600281101561450857600061435c82600661502d565b905084826002811061437057614370615081565b60200201515183614382836000614fbe565b600c811061439257614392615081565b60200201528482600281106143a9576143a9615081565b602002015160200151838260016143c09190614fbe565b600c81106143d0576143d0615081565b60200201528382600281106143e7576143e7615081565b60200201515151836143fa836002614fbe565b600c811061440a5761440a615081565b602002015283826002811061442157614421615081565b602002015151600160200201518361443a836003614fbe565b600c811061444a5761444a615081565b602002015283826002811061446157614461615081565b60200201516020015160006002811061447c5761447c615081565b60200201518361448d836004614fbe565b600c811061449d5761449d615081565b60200201528382600281106144b4576144b4615081565b6020020151602001516001600281106144cf576144cf615081565b6020020151836144e0836005614fbe565b600c81106144f0576144f0615081565b6020020152508061450081615102565b915050614346565b506145116147e2565b60006020826101808560086107d05a03fa9050808015613ab45750806145795760405162461bcd60e51b815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c6564000000000000000000000060448201526064016106ae565b5051151598975050505050505050565b60008082116145da5760405162461bcd60e51b815260206004820152601360248201527f4c6f67206d75737420626520646566696e65640000000000000000000000000060448201526064016106ae565b60005b600183821c146136e757806145f181615102565b9150506145dd565b600060015b82816001901b101561461c578061461481615102565b9150506145fe565b6001901b92915050565b6000806146388463ffffffff16614589565b614643906020615545565b90508063ffffffff16614655846146d3565b63ffffffff16901c949350505050565b60008260205b855181116146ca5761467e600285615005565b61469f578160005280860151602052604060002091506002840493506146b8565b8086015160005281602052604060002091506002840493505b6146c3602082614fbe565b905061466b565b50949350505050565b600080805b602081101561471a576001811b84811663ffffffff1615614707576146fe82601f61506a565b6001901b831792505b508061471281615102565b9150506146d8565b5092915050565b604080516080810182526000808252602082018190529181018290529060608201905b905290565b60405180604001604052806002906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806147b6614749565b8152602001614744614749565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461424f57600080fd5b60006020828403121561483657600080fd5b6136fe82614800565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156148915761489161483f565b60405290565b604051610100810167ffffffffffffffff811182821017156148915761489161483f565b6040805190810167ffffffffffffffff811182821017156148915761489161483f565b63ffffffff81168114612fb657600080fd5b803561424f816148de565b80356bffffffffffffffffffffffff8116811461424f57600080fd5b803560ff8116811461424f57600080fd5b600081830361016081121561493c57600080fd5b61494461486e565b91506101008082121561495657600080fd5b61495e614897565b9150833582526020840135614972816148de565b6020830152614983604085016148f0565b6040830152614994606085016148f0565b60608301526149a5608085016148f0565b60808301526149b660a085016148fb565b60a08301526149c760c08501614800565b60c083015260e084013560e08301528183526149e4818501614917565b602084015250506101208201356040820152614a0361014083016148f0565b606082015292915050565b6000806000806101c08587031215614a2557600080fd5b8435935060208501359250614a3d8660408701614928565b91506101a085013567ffffffffffffffff811115614a5a57600080fd5b85016101008188031215614a6d57600080fd5b939692955090935050565b60008060008060608587031215614a8e57600080fd5b843567ffffffffffffffff80821115614aa657600080fd5b818701915087601f830112614aba57600080fd5b813581811115614ac957600080fd5b8860208260051b8501011115614ade57600080fd5b6020928301999098509187013596604001359550909350505050565b60005b83811015614b15578181015183820152602001614afd565b83811115614b24576000848401525b50505050565b6020815260008251806020840152614b49816040850160208701614afa565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215614b8d57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110614bfa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b600060808201905063ffffffff80845116835280602085015116602084015280604085015116604084015250606083015161471a6060840182614bc3565b60008083601f840112614c4e57600080fd5b50813567ffffffffffffffff811115614c6657600080fd5b602083019150836020828501011115614c7e57600080fd5b9250929050565b8035801515811461424f57600080fd5b600080600080600080600080610220898b031215614cb257600080fd5b883567ffffffffffffffff811115614cc957600080fd5b614cd58b828c01614c3c565b9099509750614ce990508a60208b01614928565b955061018089013594506101a089013593506101c0890135614d0a816148de565b92506101e08901359150614d216102008a01614c85565b90509295985092959890939650565b63ffffffff858116825284811660208301528316604082015260808101614d5a6060830184614bc3565b95945050505050565b60008060008060008060008060e0898b031215614d7f57600080fd5b883567ffffffffffffffff811115614d9657600080fd5b614da28b828c01614c3c565b9099509750614db5905060208a01614917565b95506040890135614dc5816148de565b9450606089013593506080890135925060a0890135614de3816148de565b9150614d2160c08a01614c85565b60008060008060008060c08789031215614e0a57600080fd5b614e1387614800565b9550614e2160208801614800565b9450614e2f60408801614800565b9350606087013592506080870135915060a087013590509295509295509295565b600060208284031215614e6257600080fd5b81356136fe816148de565b600080600060608486031215614e8257600080fd5b505081359360208301359350604090920135919050565b600060208284031215614eab57600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ee757600080fd5b83018035915067ffffffffffffffff821115614f0257600080fd5b602001915036819003821315614c7e57600080fd5b8183823760009101908152919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614f5c57600080fd5b83018035915067ffffffffffffffff821115614f7757600080fd5b6020019150600581901b3603821315614c7e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fd157614fd1614f8f565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261501457615014614fd6565b500690565b60008261502857615028614fd6565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561506557615065614f8f565b500290565b60008282101561507c5761507c614f8f565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080858511156150c057600080fd5b838611156150cd57600080fd5b5050820193919092039150565b600084516150ec818460208901614afa565b8201838582376000930192835250909392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561513457615134614f8f565b5060010190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000610180808352615199818401868861513b565b915050825180516020840152602081015163ffffffff8082166040860152806040840151166060860152806060840151166080860152505060808101516151e860a085018263ffffffff169052565b5060a08101516bffffffffffffffffffffffff1660c08481019190915281015173ffffffffffffffffffffffffffffffffffffffff1660e0808501919091520151610100830152602083015160ff16610120830152604083015161014083015260609092015163ffffffff166101609091015292915050565b60006020828403121561527357600080fd5b81516136fe816148de565b73ffffffffffffffffffffffffffffffffffffffff88811682528716602082015260ff8616604082015263ffffffff85811660608301528416608082015260c060a082018190526000906139b2908301848661513b565b600063ffffffff8083168185168083038211156152f4576152f4614f8f565b01949350505050565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee183360301811261533157600080fd5b9190910192915050565b600082601f83011261534c57600080fd5b6153546148bb565b80604084018581111561536657600080fd5b845b81811015615380578035845260209384019301615368565b509095945050505050565b60006080828403121561539d57600080fd5b6040516040810181811067ffffffffffffffff821117156153c0576153c061483f565b6040526153cd848461533b565b81526153dc846040850161533b565b60208201529392505050565b600065ffffffffffff8083168185168183048111821515161561540d5761540d614f8f565b02949350505050565b60008151602080840160005b8381101561543e57815187529582019590820190600101615422565b509495945050505050565b60006136fe8284615416565b60006154618285615416565b9283525050602001919050565b60006040828403121561548057600080fd5b6154886148bb565b82358152602083013560208201528091505092915050565b803560208310156136e7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b600063ffffffff808416806154f3576154f3614fd6565b92169190910692915050565b600063ffffffff8084168061551657615516614fd6565b92169190910492915050565b600063ffffffff8083168185168183048111821515161561540d5761540d614f8f565b600063ffffffff8381169083168181101561556257615562614f8f565b03939250505056fe2d2d5468697320697320612062616420737472696e672e204e6f626f64792073617973207468697320737472696e672e2d2da2646970667358221220f471c8e0027b094c8280aba0df2b09703d3c1f5fcbe827952a82b88da563c5ca64736f6c63430008090033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
