{
  "contractName": "rDAI",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "strategy",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "conversionRate",
          "type": "uint256"
        }
      ],
      "name": "AllocationStrategyChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "newCode",
          "type": "address"
        }
      ],
      "name": "CodeUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "oldHatID",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "newHatID",
          "type": "uint256"
        }
      ],
      "name": "HatChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "name": "HatCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "InterestPaid",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "hatId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "isDistribution",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "redeemableAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "internalSavingsAmount",
          "type": "uint256"
        }
      ],
      "name": "LoansTransferred",
      "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": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "INITIAL_SAVING_ASSET_CONVERSION_RATE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MAX_NUM_HAT_RECIPIENTS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MAX_UINT256",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "PROPORTION_BASE",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "SELF_HAT_ID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "_guardCounter",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "_owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "accountStats",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "cumulativeInterest",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "accounts",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "rAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "rInterest",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lDebt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "sInternalAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "allocationStrategy_",
          "type": "address"
        }
      ],
      "name": "changeAllocationStrategy",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "name": "changeHat",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "name": "changeHatFor",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint32[]",
          "name": "proportions",
          "type": "uint32[]"
        },
        {
          "internalType": "bool",
          "name": "doChangeHat",
          "type": "bool"
        }
      ],
      "name": "createHat",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "getAccountStats",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "hatID",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rInterest",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lDebt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "sInternalAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rInterestPayable",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cumulativeInterest",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lRecipientsSum",
              "type": "uint256"
            }
          ],
          "internalType": "struct RTokenStructs.AccountStatsView",
          "name": "stats",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCurrentAllocationStrategy",
      "outputs": [
        {
          "internalType": "address",
          "name": "allocationStrategy",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCurrentSavingStrategy",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getGlobalStats",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "totalSupply",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalSavingsAmount",
              "type": "uint256"
            }
          ],
          "internalType": "struct RTokenStructs.GlobalStats",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "getHatByAddress",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint32[]",
          "name": "proportions",
          "type": "uint32[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "name": "getHatByID",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint32[]",
          "name": "proportions",
          "type": "uint32[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "name": "getHatStats",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "useCount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalLoans",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalSavings",
              "type": "uint256"
            }
          ],
          "internalType": "struct RTokenStructs.HatStatsView",
          "name": "stats",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getMaximumHatID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getSavingAssetBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "rAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "sOriginalAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "hatStats",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "useCount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalLoans",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalInternalSavings",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ias",
      "outputs": [
        {
          "internalType": "contract IAllocationStrategy",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "initialized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "interestPayableOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "mintAmount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "mintAmount",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint32[]",
          "name": "proportions",
          "type": "uint32[]"
        }
      ],
      "name": "mintWithNewHat",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "mintAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "name": "mintWithSelectedHat",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "payInterest",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "receivedLoanOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "receivedSavingsOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "redeemTokens",
          "type": "uint256"
        }
      ],
      "name": "redeem",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "redeemAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "redeemTo",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "redeemTokens",
          "type": "uint256"
        }
      ],
      "name": "redeemAndTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "redeemTo",
          "type": "address"
        }
      ],
      "name": "redeemAndTransferAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "savingAssetConversionRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "savingAssetOrignalAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        }
      ],
      "name": "transferAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "src",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        }
      ],
      "name": "transferAllFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "transferAllowances",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "src",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newCode",
          "type": "address"
        }
      ],
      "name": "updateCode",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract IAllocationStrategy",
          "name": "allocationStrategy",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "decimals_",
          "type": "uint256"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract IAllocationStrategy",
          "name": "allocationStrategy",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.12+commit.7709ece9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"strategy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"conversionRate\",\"type\":\"uint256\"}],\"name\":\"AllocationStrategyChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newCode\",\"type\":\"address\"}],\"name\":\"CodeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldHatID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newHatID\",\"type\":\"uint256\"}],\"name\":\"HatChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"name\":\"HatCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"InterestPaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"hatId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isDistribution\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"redeemableAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"internalSavingsAmount\",\"type\":\"uint256\"}],\"name\":\"LoansTransferred\",\"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\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"INITIAL_SAVING_ASSET_CONVERSION_RATE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_NUM_HAT_RECIPIENTS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_UINT256\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"PROPORTION_BASE\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"SELF_HAT_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"_guardCounter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"_owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"accountStats\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cumulativeInterest\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"accounts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sInternalAmount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationStrategy_\",\"type\":\"address\"}],\"name\":\"changeAllocationStrategy\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"name\":\"changeHat\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"name\":\"changeHatFor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"proportions\",\"type\":\"uint32[]\"},{\"internalType\":\"bool\",\"name\":\"doChangeHat\",\"type\":\"bool\"}],\"name\":\"createHat\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getAccountStats\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sInternalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rInterestPayable\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cumulativeInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lRecipientsSum\",\"type\":\"uint256\"}],\"internalType\":\"struct RTokenStructs.AccountStatsView\",\"name\":\"stats\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCurrentAllocationStrategy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"allocationStrategy\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCurrentSavingStrategy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getGlobalStats\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSavingsAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct RTokenStructs.GlobalStats\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getHatByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"proportions\",\"type\":\"uint32[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"name\":\"getHatByID\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"proportions\",\"type\":\"uint32[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"name\":\"getHatStats\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"useCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalLoans\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSavings\",\"type\":\"uint256\"}],\"internalType\":\"struct RTokenStructs.HatStatsView\",\"name\":\"stats\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getMaximumHatID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getSavingAssetBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sOriginalAmount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"hatStats\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"useCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalLoans\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalInternalSavings\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ias\",\"outputs\":[{\"internalType\":\"contract IAllocationStrategy\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract IAllocationStrategy\",\"name\":\"allocationStrategy\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"decimals_\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract IAllocationStrategy\",\"name\":\"allocationStrategy\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"interestPayableOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"proportions\",\"type\":\"uint32[]\"}],\"name\":\"mintWithNewHat\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"name\":\"mintWithSelectedHat\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"payInterest\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"receivedLoanOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"receivedSavingsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"redeemAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"redeemTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"redeemAndTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"redeemTo\",\"type\":\"address\"}],\"name\":\"redeemAndTransferAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"savingAssetConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"savingAssetOrignalAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"}],\"name\":\"transferAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"}],\"name\":\"transferAllFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"transferAllowances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newCode\",\"type\":\"address\"}],\"name\":\"updateCode\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"changeAllocationStrategy(address)\":{\"details\":\"IRToken.changeAllocationStrategy implementation\"},\"changeHat(uint256)\":{\"details\":\"IRToken.changeHat implementation\"},\"changeHatFor(address,uint256)\":{\"details\":\"IRToken.changeHatFor implementation\"},\"createHat(address[],uint32[],bool)\":{\"details\":\"IRToken.createHat implementation\"},\"getAccountStats(address)\":{\"details\":\"IRToken.getAccountStats implementation\"},\"getCurrentAllocationStrategy()\":{\"details\":\"IRToken.changeHatFor implementation\"},\"getCurrentSavingStrategy()\":{\"details\":\"IRToken.getCurrentSavingStrategy implementation\"},\"getGlobalStats()\":{\"details\":\"IRToken.getAccountStats implementation!1\"},\"getHatByAddress(address)\":{\"details\":\"IRToken.getHatByAddress implementation\"},\"getHatByID(uint256)\":{\"details\":\"IRToken.getHatByID implementation\"},\"getHatStats(uint256)\":{\"details\":\"IRToken.getHatStats implementation\"},\"getMaximumHatID()\":{\"details\":\"IRToken.getMaximumHatID implementation\"},\"getSavingAssetBalance()\":{\"details\":\"IRToken.getSavingAssetBalance implementation\"},\"interestPayableOf(address)\":{\"details\":\"IRToken.interestPayableOf implementation\"},\"isOwner()\":{\"details\":\"Returns true if the caller is the current owner.\"},\"mint(uint256)\":{\"details\":\"IRToken.mint implementation\"},\"mintWithNewHat(uint256,address[],uint32[])\":{\"details\":\"IRToken.mintWithNewHat implementation\"},\"mintWithSelectedHat(uint256,uint256)\":{\"details\":\"IRToken.mintWithSelectedHat implementation\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"payInterest(address)\":{\"details\":\"IRToken.payInterest implementation\"},\"receivedLoanOf(address)\":{\"details\":\"IRToken.receivedLoanOf implementation\"},\"receivedSavingsOf(address)\":{\"details\":\"IRToken.receivedSavingsOf implementation\"},\"redeem(uint256)\":{\"details\":\"IRToken.redeem implementation     It withdraws equal amount of initially supplied underlying assets\"},\"redeemAll()\":{\"details\":\"IRToken.redeemAll implementation\"},\"redeemAndTransfer(address,uint256)\":{\"details\":\"IRToken.redeemAndTransfer implementation\"},\"redeemAndTransferAll(address)\":{\"details\":\"IRToken.redeemAndTransferAll implementation\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferAll(address)\":{\"details\":\"IRToken.transferAll implementation\"},\"transferAllFrom(address,address)\":{\"details\":\"IRToken.transferAllFrom implementation\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"updateCode(address)\":{\"details\":\"Update the rToken logic contract code\"}}},\"userdoc\":{\"methods\":{\"allowance(address,address)\":{\"notice\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through `transferFrom`. This is zero by default.     * This value changes when `approve` or `transferFrom` are called.\"},\"approve(address,uint256)\":{\"notice\":\"Sets `amount` as the allowance of `spender` over the caller's tokens.     * Returns a boolean value indicating whether the operation succeeded.     * > Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729     * Emits an `Approval` event.\"},\"balanceOf(address)\":{\"notice\":\"Returns the amount of tokens owned by `account`.\"},\"initialize(address,string,string,uint256)\":{\"notice\":\"Create rToken linked with cToken at `cToken_`\"},\"transfer(address,uint256)\":{\"notice\":\"Moves `amount` tokens from the caller's account to `dst`.     * Returns a boolean value indicating whether the operation succeeded.     * Emits a `Transfer` event. May also emit `InterestPaid` event.\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance.     * Returns a boolean value indicating whether the operation succeeded.     * Emits a `Transfer` event.\"}},\"notice\":\"RToken instantiation for rSAI (Redeemable SAI)\"}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/tokens/rDAI.sol\":\"rDAI\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/IAllocationStrategy.sol\":{\"keccak256\":\"0xe6771d9a3f2c4719d6b2c60cd8abf03686d8cdddf5d359ccf7ab58d17d9e1380\",\"urls\":[\"bzz-raw://80f212859923c044b4ef360dc19776149f2aacbb27c994f6b76b9cc8260a41f7\",\"dweb:/ipfs/QmWPsojno4n63Drh9WvBtCM89aovwDuabHppDh1LVgmgkY\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/IRToken.sol\":{\"keccak256\":\"0xa7e01f9f70c505d624fe31e53b6b766d0d476c2851fadc1c3e3e19b779b4d2fc\",\"urls\":[\"bzz-raw://417316c44a1591fd07c2254097f98fd4ac0bc352e7035cf57f9df9c22ebde63c\",\"dweb:/ipfs/QmVoRFAMjS7GSjtLCoZJsqXCKygqVW7oas9X1G1WrMNZmE\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/IRTokenAdmin.sol\":{\"keccak256\":\"0x25dba438823ddf59003f7963b49cb3e7c1105e62c19126ccc99aeb39b02c59f9\",\"urls\":[\"bzz-raw://53c52647440910aa820fe4d0ad6a358faf4a6f80562fa0d6cb87b5a22c6fbed8\",\"dweb:/ipfs/QmVFpJKMQpFymdK22v4b4NQcs5yWEN3urTtnRkHFoideNx\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/LibraryLock.sol\":{\"keccak256\":\"0x9195f8c96fd7bb4cdd7696f14c15ff7cece01eca84a38de25693bf45318b018f\",\"urls\":[\"bzz-raw://0bd72dac7bb67467446ddea9fa47c79f9b48ce2c528cbab8fd05bdc19537cbd2\",\"dweb:/ipfs/QmSHK5T1927rf6T7xjRaQMuo1gpPaLVHb947pvPTHwXcwj\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/Ownable.sol\":{\"keccak256\":\"0xd2568237b51a02b9d1a1b143b938f664988828145f11d0d0acc44a832803f882\",\"urls\":[\"bzz-raw://4371b65f807c88fb73f3a691ade6ccdc556a28e0f63a8133f011c1f7054c7ffc\",\"dweb:/ipfs/QmVCZSEccoWe9BNFknDXjJviZbGrCUbs32bcwea9jtzpWA\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/Proxiable.sol\":{\"keccak256\":\"0xd14d0d1ae8b8ed59af55ac901ec2a60d1087ab7e86fbd389758baf6afb35721f\",\"urls\":[\"bzz-raw://bf892b136580d5241a54c68a942b2e23f0f321700fa1aacd16e0fdb5f01a1ced\",\"dweb:/ipfs/QmRUXF7yXBJVRwqv11dDxWqt8DEJXn3YMWRUZv8escF5ya\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RToken.sol\":{\"keccak256\":\"0x50016dfcaf825f6a63785635129399429615a3dbda6d668f17fa7034e6bde634\",\"urls\":[\"bzz-raw://b31879e7e8e36197e54c6e8b85b91ac0c61acf5eae05c27a3f995b6c0dd18b82\",\"dweb:/ipfs/QmPJU3oAe6FzjmWZWDa5oiPGTCq9yi681jwxvJkHWjf56i\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RTokenStorage.sol\":{\"keccak256\":\"0x2879364f6e821d6d136ec4dc1d70a9ab47f5cecfff5c117d86cce5b5f9e4d79c\",\"urls\":[\"bzz-raw://30a1e2a903b3efdf921270a53f6da3dcbed9a72dd7a63fafc66520c612b52450\",\"dweb:/ipfs/QmPnV6yWW1nCbdXH1nU22wRPRxzUDDr1S6mFhWaoz5fvCR\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RTokenStructs.sol\":{\"keccak256\":\"0x5c7c3b26d2f6f8fd489b2a326d4658f67e1f4e3cbe03c3a6831dd5103ead41e0\",\"urls\":[\"bzz-raw://991d8988992e169e0faa0d57f16684cc190b33a5b4e028993c9f74f158a8a16d\",\"dweb:/ipfs/QmVYKkdVLb2yuhDx7fMTY8UNFrskX2w3eSyLMnvoBVD3yU\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/ReentrancyGuard.sol\":{\"keccak256\":\"0x447761b97eb2e13c2a44d868b1e4afd8127c6bfdea4bfbf642cfadd0b106b93b\",\"urls\":[\"bzz-raw://28a8e50952dad7e86a30ec746434adb8b7ed70249488508ead4f271a6f61e74e\",\"dweb:/ipfs/QmNmJkH3DKcQsD9ZRUWzeojLNvgjn8TNVtHkbDRy35X8RY\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/tokens/rDAI.sol\":{\"keccak256\":\"0x7bfbe33314e378384e0e17f24acbf55198f83afc88c83abc4304e881a39c486a\",\"urls\":[\"bzz-raw://2e4e05cadd5f9aa3d7d229944aba79dde2c623744184e5b207068eaf21cbe7c0\",\"dweb:/ipfs/QmVhcD5a6YQFFJHvAgeLyH8BpwLGRCxCfFsNhWkx6umeKW\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]}},\"version\":1}",
  "bytecode": "0x60806040819052600080546001600160a01b03191633178082556001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3614808806100576000396000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806370a08231116101e9578063c034d0db1161010f578063d8884795116100ad578063f04bf8b31161007c578063f04bf8b314610757578063f2fde38b14610779578063fc0c546a1461078c578063fdbbf8ac14610794576103a4565b8063d888479514610713578063db006a7514610729578063dd62ed3e1461073c578063e192782b1461074f576103a4565b8063c4d66de8116100e9578063c4d66de8146106c7578063d007c644146106da578063d271be3f146106ed578063d3ac25c414610700576103a4565b8063c034d0db146104f5578063c1a2007d14610431578063c200659e146106bf576103a4565b80638f32d59b11610187578063a9059cbb11610156578063a9059cbb14610689578063b2bdfa7b1461069c578063b5dbfc1a146106a4578063bf5bfdfb146106b7576103a4565b80638f32d59b1461065357806395d89b411461065b578063a0712d6814610663578063a3a7e7f314610676576103a4565b806377ede051116101c357806377ede0511461062557806381c8d895146103d257806384d4b410146106385780638da5cb5b1461064b576103a4565b806370a0823114610602578063715018a61461061557806371ee46eb1461061d576103a4565b8063313ce567116102ce5780634d12d4b61161026c5780635cde50551161023b5780635cde5055146105a35780635e5c06e2146105b657806363152a50146105da5780636b4169c3146105ed576103a4565b80634d12d4b6146105535780634fd7c0dd1461056657806352d1902d14610586578063556043ef1461058e576103a4565b80633e20a929116102a85780633e20a9291461051057806346951954146105185780634929fbf71461052d578063496cc16414610540576103a4565b8063313ce567146104ed57806333a581d2146104f5578063388c0b8c146104fd576103a4565b8063158ef93e1161034657806323b872dd1161031557806323b872dd1461049f57806328cdfaeb146104b25780632f2ba814146104d25780632f4350c2146104e5576103a4565b8063158ef93e1461045957806318160ddd146104615780631cda95d514610469578063226e835c1461048a576103a4565b806306fdde031161038257806306fdde0314610409578063095ea7b31461041e57806310f3a6d81461043157806313e23e4114610446576103a4565b80630290cbc8146103a9578063039ab887146103d2578063054ab01a146103e7575b600080fd5b6103bc6103b7366004613799565b6107a7565b6040516103c991906143d3565b60405180910390f35b6103da61081a565b6040516103c991906143fc565b6103fa6103f5366004613799565b610826565b6040516103c9939291906145e4565b610411610855565b6040516103c99190614418565b6103bc61042c36600461385c565b6108e0565b61043961094e565b6040516103c99190614342565b6103da610454366004613799565b61095e565b6103bc610980565b6103da610990565b61047c6104773660046139fd565b610996565b6040516103c99291906143ae565b6104926109ac565b6040516103c99190614689565b6103bc6104ad36600461380f565b6109b4565b6104c56104c0366004613799565b610a0c565b6040516103c991906145b9565b6103bc6104e03660046139fd565b610b5d565b6103bc610ba2565b6103da610c0a565b6103da610c10565b6103bc61050b366004613aa2565b610c16565b6103da610c6b565b61052b610526366004613799565b610c75565b005b61052b61053b36600461385c565b610d0a565b6103da61054e366004613799565b610d61565b61052b61056136600461396c565b610d73565b6105796105743660046139fd565b610fb0565b6040516103c991906145d6565b6103da610ff2565b610596611016565b6040516103c9919061440a565b6103da6105b136600461388c565b611025565b6105c96105c4366004613799565b6110dc565b6040516103c995949392919061463d565b6103da6105e83660046137d5565b61110b565b6105f5611128565b6040516103c991906145c8565b6103da610610366004613799565b611158565b61052b611176565b6103da6111e4565b6103da610633366004613799565b6111ea565b6103bc6106463660046137d5565b611212565b61043961125c565b6103bc61126b565b61041161127c565b6103bc6106713660046139fd565b6112d7565b6103bc610684366004613799565b6112ed565b6103bc61069736600461385c565b611338565b61043961138a565b6103bc6106b2366004613a1b565b611399565b6103da611459565b6103da61145f565b61052b6106d536600461394e565b611465565b6103bc6106e8366004613799565b6114b7565b6103bc6106fb36600461385c565b6114cd565b61052b61070e366004613799565b6114ee565b61071b61192a565b6040516103c9929190614621565b6103bc6107373660046139fd565b61193f565b6103da61074a3660046137d5565b611960565b6103da61198b565b61076a6107653660046139fd565b611990565b6040516103c99392919061462f565b61052b610787366004613799565b6119b1565b6105966119de565b6103da6107a2366004613799565b6119ed565b60018054810190819055600090336107be81611a1d565b6001600160a01b0381166000908152600c60205260409020600101546107e5908590611bc6565b600192505060015481146108145760405162461bcd60e51b815260040161080b90614599565b60405180910390fd5b50919050565b670de0b6b3a764000081565b6001600160a01b0381166000908152600c602052604090205460608061084b83611d20565b9395909450915050565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156108d85780601f106108ad576101008083540402835291602001916108d8565b820191906000526020600020905b8154815290600101906020018083116108bb57829003601f168201915b505050505081565b336000818152600a602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061093a9087906143fc565b60405180910390a360019150505b92915050565b6006546001600160a01b03165b90565b6001600160a01b0381166000908152600c60205260409020600401545b919050565b600054600160a01b900460ff1681565b60055481565b6060806109a283611d20565b9094909350915050565b63ffffffff81565b600180548101908190556000906109ca85611a1d565b6109d633868686611e82565b6109df84611a1d565b600191506001548114610a045760405162461bcd60e51b815260040161080b90614599565b509392505050565b610a14613430565b6001600160a01b0382166000908152600c6020908152604091829020805484526001810154918401919091526002810154918301919091526004810154606083015260058101546080830152610a69816120fe565b60a08301526001600160a01b0383166000908152600d60205260408120805460c08501528254909190600b9060001914610aa4578354610aa7565b60005b81548110610ab157fe5b90600052602060002090600202019050826000015460001480610ad657508254600019145b15610af757610aed84602001518560400151612151565b60e0850152610b55565b60005b6001820154811015610b5357836003016000836000018381548110610b1b57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460e0860180519091019052600101610afa565b505b505050919050565b60018054810190819055600090610b74338461216c565b610b7d33611a1d565b6001915060015481146108145760405162461bcd60e51b815260040161080b90614599565b6001805481019081905560009033610bb981611a1d565b6001600160a01b0381166000908152600c6020526040902060010154610be0908290611bc6565b60019250506001548114610c065760405162461bcd60e51b815260040161080b90614599565b5090565b60045481565b60001981565b60018054810190819055600090610c2d338461216c565b610c3684612252565b610c3f33611a1d565b600191506001548114610c645760405162461bcd60e51b815260040161080b90614599565b5092915050565b600b546000190190565b610c7d61126b565b610c995760405162461bcd60e51b815260040161080b90614529565b600054600160a01b900460ff161515600114610cc75760405162461bcd60e51b815260040161080b90614579565b610cd081612550565b7f34459cf4c63f38e9b4af4ff8f74035bad6157484e669ffde70188afdf9917c6881604051610cff9190614342565b60405180910390a150565b610d1261126b565b610d2e5760405162461bcd60e51b815260040161080b90614529565b610d3782612623565b610d535760405162461bcd60e51b815260040161080b906144c9565b610d5d828261216c565b5050565b600d6020526000908152604090205481565b600054600160a01b900460ff1615610d9d5760405162461bcd60e51b815260040161080b906144b9565b610da5612629565b600080546001600160a01b03191633179055600180558251610dce906002906020860190613475565b508151610de2906003906020850190613475565b506004818155670de0b6b3a7640000600955600680546001600160a01b0319166001600160a01b03878116919091179182905560408051636f307dc360e01b815290519290911692636f307dc3928282019260209290829003018186803b158015610e4c57600080fd5b505afa158015610e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e8491908101906137b7565b600780546001600160a01b03929092166001600160a01b031990921691909117905560408051600081830181815260608301845282528251818152602080820190945283830152600b8054600181018083559190925282518051919460029093027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90192610f17928492909101906134ef565b506020828101518051610f309260018501920190613550565b5050600080525050600e6020526000197fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c556006546009546040517faa54229fa6d6451d2cd5d13b5bc60f1230a0f79091118926e9b95d8f4811713a92610fa2926001600160a01b0390911691614393565b60405180910390a150505050565b610fb86135fb565b6000828152600e60209081526040909120805483526001810154918301919091526002810154610fe79061263e565b604083015250919050565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf790565b6006546001600160a01b031681565b6001805481019081905560408051602080880282810182019093528782526000939261109f92918a918a9182919085019084908082843760009201919091525050604080516020808b0282810182019093528a82529093508a9250899182918501908490808284376000920191909152506126dc92505050565b915082156110b1576110b1338361216c565b60015481146110d25760405162461bcd60e51b815260040161080b90614599565b5095945050505050565b600c60205260009081526040902080546001820154600283015460048401546005909401549293919290919085565b600a60209081526000928352604080842090915290825290205481565b61113061361c565b600061113d60085461291d565b60408051808201909152600554815291016020820152905090565b6001600160a01b03166000908152600c602052604090206001015490565b61117e61126b565b61119a5760405162461bcd60e51b815260040161080b90614529565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60085481565b6001600160a01b0381166000908152600c6020526040812061120b816120fe565b9392505050565b6001805481019081905560009061122884611a1d565b6001600160a01b0384166000908152600c602052604090206001015461125390339086908690611e82565b610c3f83611a1d565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108d85780601f106108ad576101008083540402835291602001916108d8565b60018054810190819055600090610b7483612252565b600180548101908190556000903361130481611a1d565b6001600160a01b0381166000908152600c602052604090206001015461132f90829081908790611e82565b6107e584611a1d565b600180548101908190556000903361134f81611a1d565b61135b81828787611e82565b61136485611a1d565b60019250506001548114610c645760405162461bcd60e51b815260040161080b90614599565b6000546001600160a01b031681565b6001805481019081905560408051602080870282810182019093528682526000939284926114159290918a918a91829185019084908082843760009201919091525050604080516020808b0282810182019093528a82529093508a9250899182918501908490808284376000920191909152506126dc92505050565b9050611421338261216c565b61142a88612252565b61143333611a1d565b600192505060015481146110d25760405162461bcd60e51b815260040161080b90614599565b60015481565b60095481565b6114b4816040518060400160405280600e81526020016d52656465656d61626c652044414960901b815250604051806040016040528060048152602001637244414960e01b8152506012610d73565b50565b60018054810190819055600090610b7d83611a1d565b60018054810190819055600090336114e481611a1d565b6113648585611bc6565b6001805481019081905561150061126b565b61151c5760405162461bcd60e51b815260040161080b90614529565b60075460408051636f307dc360e01b8152905184926001600160a01b039081169290841691636f307dc391600480820192602092909190829003018186803b15801561156757600080fd5b505afa15801561157b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061159f91908101906137b7565b6001600160a01b0316146115c55760405162461bcd60e51b815260040161080b906144f9565b600680546001600160a01b038381166001600160a01b0319831617909255604080516317a1a86160e11b8152815193909216926000928492632f4350c29260048084019382900301818787803b15801561161e57600080fd5b505af1158015611632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116569190810190613ac1565b506007546040516370a0823160e01b81529192506000916001600160a01b03909116906370a082319061168d903090600401614342565b60206040518083038186803b1580156116a557600080fd5b505afa1580156116b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116dd9190810190613930565b60075460065460405163095ea7b360e01b81529293506001600160a01b039182169263095ea7b3926117159216908590600401614393565b602060405180830381600087803b15801561172f57600080fd5b505af1158015611743573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117679190810190613912565b6117835760405162461bcd60e51b815260040161080b906144a9565b600654604051630305da4f60e61b81526000916001600160a01b03169063c17693c0906117b49085906004016143fc565b602060405180830381600087803b1580156117ce57600080fd5b505af11580156117e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118069190810190613930565b6006549091506001600160a01b0385811691161461188457836001600160a01b031663f2fde38b61183561125c565b6040518263ffffffff1660e01b81526004016118519190614342565b600060405180830381600087803b15801561186b57600080fd5b505af115801561187f573d6000803e3d6000fd5b505050505b600061189160085461297c565b6009549091506118b7836118ab878463ffffffff61299f16565b9063ffffffff6129d916565b6009556118c382612a1b565b6008556009546040517faa54229fa6d6451d2cd5d13b5bc60f1230a0f79091118926e9b95d8f4811713a916118fa918c9190614393565b60405180910390a1505050505050506001548114610d5d5760405162461bcd60e51b815260040161080b90614599565b6008546000906119398161291d565b91509091565b600180548101908190556000903361195681611a1d565b6107e58185611bc6565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b603281565b600e6020526000908152604090208054600182015460029092015490919083565b6119b961126b565b6119d55760405162461bcd60e51b815260040161080b90614529565b6114b481612a3d565b6007546001600160a01b031681565b6001600160a01b0381166000908152600c6020526040812060058101548290611a159061263e565b949350505050565b6001600160a01b038082166000908152600c60209081526040808320600d8352818420600654835163a6afed9560e01b815293519296919591169363a6afed95936004808201949293918390030190829087803b158015611a7d57600080fd5b505af1158015611a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611ab59190810190613912565b611ad15760405162461bcd60e51b815260040161080b90614429565b6000611adc836120fe565b90508015611bc0578154611af6908263ffffffff612abe16565b82556002830154611b0d908263ffffffff612abe16565b60028401556001830154611b27908263ffffffff612abe16565b6001840155600554611b3f908263ffffffff612abe16565b6005556040516001600160a01b038516907f16cbc685358ca7d4e6b273dcdf2cb5d18c80b950aa2319b519756cd016233a6c90611b7d9084906143fc565b60405180910390a2836001600160a01b031660006001600160a01b03166000805160206147a683398151915283604051611bb791906143fc565b60405180910390a35b50505050565b336000908152600c6020526040902081611bf25760405162461bcd60e51b815260040161080b90614549565b8060010154821115611c165760405162461bcd60e51b815260040161080b906144e9565b611c203383612ae3565b6001810154611c35908363ffffffff612b9f16565b6001820155600554611c4d908363ffffffff612b9f16565b60055560075460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611c829086908690600401614393565b602060405180830381600087803b158015611c9c57600080fd5b505af1158015611cb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611cd49190810190613912565b611cf05760405162461bcd60e51b815260040161080b90614509565b60405160009033906000805160206147a683398151915290611d139086906143fc565b60405180910390a3505050565b6060808215801590611d3457506000198314155b15611e6357611d41613636565b600b8481548110611d4e57fe5b906000526020600020906002020160405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015611dc057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611da2575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e4457602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611e075790505b5050505050815250509050806000015192508060200151915050611e7d565b505060408051600080825260208201908152818301909252905b915091565b816001600160a01b0316836001600160a01b03161415611eb45760405162461bcd60e51b815260040161080b906144d9565b6001600160a01b0383166000908152600c6020526040902060010154811115611eef5760405162461bcd60e51b815260040161080b90614539565b60006001600160a01b038581169085161415611f0e5750600019611f36565b506001600160a01b038084166000908152600a60209081526040808320938816835292905220545b81811015611f565760405162461bcd60e51b815260040161080b90614439565b6000611f68828463ffffffff612b9f16565b6001600160a01b0386166000908152600c602052604081206001015491925090611f98908563ffffffff612b9f16565b6001600160a01b0386166000908152600c602052604081206001015491925090611fc8908663ffffffff612abe16565b90506000198414611ffc576001600160a01b038088166000908152600a60209081526040808320938c168352929052208390555b60006120088887612be1565b9050612015878783612c90565b6001600160a01b038089166000818152600c60205260408082206001808201899055948c16835290822090930185905552541580159061206b57506001600160a01b0387166000908152600c6020526040902054155b801561209157506001600160a01b0388166000908152600c602052604090205460001914155b156120ba576001600160a01b0388166000908152600c60205260409020546120ba90889061216c565b866001600160a01b0316886001600160a01b03166000805160206147a6833981519152886040516120eb91906143fc565b60405180910390a3505050505050505050565b60008061210e836005015461263e565b905061212b83600201548460040154612abe90919063ffffffff16565b811115612147578260020154836004015482030391505061097b565b600091505061097b565b60008183101561216357506000610948565b50808203610948565b60001981148061217d5750600b5481105b6121995760405162461bcd60e51b815260040161080b90614479565b6001600160a01b0382166000908152600c602090815260408083208054808552600e909352818420858552919093206001840154156121ff5760006121e2878660010154612be1565b86865560018601549091506121f990889083612c90565b50612203565b8484555b815460001901825580546001018155604051859084906001600160a01b038916907f356f094000bcd3968ad51bf92c9d115ed7294626dea8ae4cc5b24273702e111390600090a4505050505050565b600754604051636eb1769f60e11b815282916001600160a01b03169063dd62ed3e906122849033903090600401614350565b60206040518083038186803b15801561229c57600080fd5b505afa1580156122b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122d49190810190613930565b10156122f25760405162461bcd60e51b815260040161080b90614559565b336000818152600c60205260409081902060075491516323b872dd60e01b815290926001600160a01b03909216916323b872dd9161233791903090879060040161436b565b602060405180830381600087803b15801561235157600080fd5b505af1158015612365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123899190810190613912565b6123a55760405162461bcd60e51b815260040161080b90614509565b60075460065460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926123db929116908690600401614393565b602060405180830381600087803b1580156123f557600080fd5b505af1158015612409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061242d9190810190613912565b6124495760405162461bcd60e51b815260040161080b906144a9565b600654604051630305da4f60e61b81526000916001600160a01b03169063c17693c09061247a9086906004016143fc565b602060405180830381600087803b15801561249457600080fd5b505af11580156124a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124cc9190810190613930565b6005549091506124e2908463ffffffff612abe16565b60055560018201546124fa908463ffffffff612abe16565b6001830155600854612512908263ffffffff612abe16565b60085560006125208261297c565b905061252d338583612c90565b60405133906000906000805160206147a683398151915290611bb79088906143fc565b806001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561258957600080fd5b505afa15801561259d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125c19190810190613930565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7146125ff5760405162461bcd60e51b815260040161080b90614449565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf755565b3b151590565b6000805460ff60a01b1916600160a01b179055565b60006109486009546118ab600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561269757600080fd5b505afa1580156126ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126cf9190810190613930565b859063ffffffff61299f16565b60008060008451116127005760405162461bcd60e51b815260040161080b906145a9565b6032845111156127225760405162461bcd60e51b815260040161080b90614569565b82518451146127435760405162461bcd60e51b815260040161080b90614469565b506000805b84518210156127f957600084838151811061275f57fe5b602002602001015163ffffffff161161278a5760405162461bcd60e51b815260040161080b90614589565b60006001600160a01b03168583815181106127a157fe5b60200260200101516001600160a01b031614156127d05760405162461bcd60e51b815260040161080b90614499565b8382815181106127dc57fe5b602002602001015163ffffffff1681019050816001019150612748565b600091505b8351821015612863578063ffffffff801685848151811061281b57fe5b602002602001015163ffffffff16028161283157fe5b0484838151811061283e57fe5b602002602001019063ffffffff16908163ffffffff16815250508160010191506127fe565b604080518082019091528581526020808201869052600b80546001818101808455600093909352845180519195939460029093027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901926128c9928492909101906134ef565b5060208281015180516128e29260018501920190613550565b505050039250827f755babe5551737dcd4c723af196cff0ed1fa99a4c6957c62262d6b1425f864aa60405160405180910390a2505092915050565b6000610948670de0b6b3a76400006118ab600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561269757600080fd5b6000610948670de0b6b3a76400006118ab6009548561299f90919063ffffffff16565b6000826129ae57506000610948565b828202828482816129bb57fe5b041461120b5760405162461bcd60e51b815260040161080b90614519565b600061120b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f38565b600954600090610948906118ab84670de0b6b3a764000063ffffffff61299f16565b6001600160a01b038116612a635760405162461bcd60e51b815260040161080b90614459565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008282018381101561120b5760405162461bcd60e51b815260040161080b90614489565b60065460405163852a12e360e01b81526000916001600160a01b03169063852a12e390612b149085906004016143fc565b602060405180830381600087803b158015612b2e57600080fd5b505af1158015612b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b669190810190613930565b9050612b718161297c565b50612b7c8383612f6f565b806008541115612b9457600880548290039055612b9a565b60006008555b505050565b600061120b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061325c565b6006546040805163a6afed9560e01b815290516000926001600160a01b03169163a6afed9591600480830192602092919082900301818787803b158015612c2757600080fd5b505af1158015612c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c5f9190810190613912565b612c7b5760405162461bcd60e51b815260040161080b90614429565b612c8482613288565b90506109488383612f6f565b6001600160a01b0383166000908152600c602052604081208054909190600b9060001914612cbf578254612cc2565b60005b81548110612ccc57fe5b600091825260208220600290910201805490925015612ee95750600084845b6001840154831015612ee2576000600c6000866000018681548110612d0c57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001812060018701549092506000190185149081612d975763ffffffff8016612d8a886001018881548110612d5d57fe5b600091825260209091206008820401548d916007166004026101000a900463ffffffff9081169061299f16565b81612d9157fe5b04612d99565b845b9050612de5818960030160008a6000018a81548110612db457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549063ffffffff612abe16565b886003016000896000018981548110612dfa57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556004830154612e34908263ffffffff612abe16565b6004840155612e438582612151565b9450600082612e725763ffffffff8016612e65896001018981548110612d5d57fe5b81612e6c57fe5b04612e74565b845b6005850154909150612e8c908263ffffffff612abe16565b6005850155612e9b8582612151565b9450612ed38c896000018981548110612eb057fe5b6000918252602090912001548b546001600160a01b039091169060018686613327565b50505050826001019250612ceb565b5050612f30565b6004830154612efe908663ffffffff612abe16565b60048401556005830154612f18908563ffffffff612abe16565b60058401558254612f30908790819060018989613327565b505050505050565b60008183612f595760405162461bcd60e51b815260040161080b9190614418565b506000838581612f6557fe5b0495945050505050565b6001600160a01b0382166000908152600c602052604081208054909190600b9060001914612f9e578254612fa1565b60005b81548110612fab57fe5b906000526020600020906002020190506000612fcf83600101548460020154612151565b905083811115612fdc5750825b6000612fe782613288565b8354909150156131e857818160005b60018601548110156131e0576000600c600088600001848154811061301757fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120600189015490925060001901831490816130a25763ffffffff80166130958a600101868154811061306857fe5b600091825260209091206008820401548b916007166004026101000a900463ffffffff9081169061299f16565b8161309c57fe5b046130a4565b855b90506130b4836004015482612151565b83600401819055506130ff8a60030160008b60000187815481106130d457fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205482612151565b8a60030160008b600001878154811061311457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556131438682612151565b95506000826131725763ffffffff80166131658b600101878154811061306857fe5b8161316c57fe5b04613174565b855b9050613184846005015482612151565b60058501556131938682612151565b955061319e846133fe565b6131d18d8b60000187815481106131b157fe5b60009182526020822001548e546001600160a01b03909116918686613327565b50505050806001019050612ff6565b50505061322b565b6131f6846004015483612151565b6004850155600584015461320a9082612151565b6005850155613218846133fe565b61322b8687866000015460008686613327565b81851115612f305761323e828603613288565b905061324e846005015482612151565b6005850155612f30846133fe565b600081848411156132805760405162461bcd60e51b815260040161080b9190614418565b505050900390565b6000610948600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b1580156132db57600080fd5b505afa1580156132ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133139190810190613930565b6009546118ab90859063ffffffff61299f16565b6000600e6000868152602001908152602001600020905084866001600160a01b0316886001600160a01b03167f7fb238306664f9cc50083b666d8979f411dd72154c6e9bf558c76b39e14e7d29878787604051613386939291906143e1565b60405180910390a483156133cd5760018101546133a9908463ffffffff612abe16565b600182015560028101546133c3908363ffffffff612abe16565b60028201556133f5565b6133db816001015484612151565b600182015560028101546133ef9083612151565b60028201555b50505050505050565b600061340d826005015461263e565b90508160040154810382600201541115610d5d5760048201549003600290910155565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106134b657805160ff19168380011785556134e3565b828001600101855582156134e3579182015b828111156134e35782518255916020019190600101906134c8565b50610c06929150613650565b828054828255906000526020600020908101928215613544579160200282015b8281111561354457825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061350f565b50610c0692915061366a565b828054828255906000526020600020906007016008900481019282156135ef5791602002820160005b838211156135bd57835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302613579565b80156135ed5782816101000a81549063ffffffff02191690556004016020816003010492830192600103026135bd565b505b50610c0692915061368e565b60405180606001604052806000815260200160008152602001600081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060608152602001606081525090565b61095b91905b80821115610c065760008155600101613656565b61095b91905b80821115610c065780546001600160a01b0319168155600101613670565b61095b91905b80821115610c0657805463ffffffff19168155600101613694565b803561094881614776565b805161094881614776565b60008083601f8401126136d757600080fd5b50813567ffffffffffffffff8111156136ef57600080fd5b60208301915083602082028301111561370757600080fd5b9250929050565b80356109488161478a565b80516109488161478a565b805161094881614793565b80356109488161479c565b600082601f83011261374b57600080fd5b813561375e613759826146be565b614697565b9150808252602083016020830185838301111561377a57600080fd5b613785838284614734565b50505092915050565b803561094881614793565b6000602082840312156137ab57600080fd5b6000611a1584846136af565b6000602082840312156137c957600080fd5b6000611a1584846136ba565b600080604083850312156137e857600080fd5b60006137f485856136af565b9250506020613805858286016136af565b9150509250929050565b60008060006060848603121561382457600080fd5b600061383086866136af565b9350506020613841868287016136af565b92505060406138528682870161378e565b9150509250925092565b6000806040838503121561386f57600080fd5b600061387b85856136af565b92505060206138058582860161378e565b6000806000806000606086880312156138a457600080fd5b853567ffffffffffffffff8111156138bb57600080fd5b6138c7888289016136c5565b9550955050602086013567ffffffffffffffff8111156138e657600080fd5b6138f2888289016136c5565b935093505060406139058882890161370e565b9150509295509295909350565b60006020828403121561392457600080fd5b6000611a158484613719565b60006020828403121561394257600080fd5b6000611a158484613724565b60006020828403121561396057600080fd5b6000611a15848461372f565b6000806000806080858703121561398257600080fd5b600061398e878761372f565b945050602085013567ffffffffffffffff8111156139ab57600080fd5b6139b78782880161373a565b935050604085013567ffffffffffffffff8111156139d457600080fd5b6139e08782880161373a565b92505060606139f18782880161378e565b91505092959194509250565b600060208284031215613a0f57600080fd5b6000611a15848461378e565b600080600080600060608688031215613a3357600080fd5b6000613a3f888861378e565b955050602086013567ffffffffffffffff811115613a5c57600080fd5b613a68888289016136c5565b9450945050604086013567ffffffffffffffff811115613a8757600080fd5b613a93888289016136c5565b92509250509295509295909350565b60008060408385031215613ab557600080fd5b600061387b858561378e565b60008060408385031215613ad457600080fd5b6000613ae08585613724565b925050602061380585828601613724565b6000613afd8383613b20565b505060200190565b6000613afd8383614339565b613b1a81614729565b82525050565b613b1a816146f9565b6000613b34826146ec565b613b3e81856146f0565b9350613b49836146e6565b8060005b83811015613b77578151613b618882613af1565b9750613b6c836146e6565b925050600101613b4d565b509495945050505050565b6000613b8d826146ec565b613b9781856146f0565b9350613ba2836146e6565b8060005b83811015613b77578151613bba8882613b05565b9750613bc5836146e6565b925050600101613ba6565b613b1a81614704565b613b1a8161095b565b613b1a81614709565b6000613bf6826146ec565b613c0081856146f0565b9350613c10818560208601614740565b613c198161476c565b9093019392505050565b6000613c306015836146f0565b741858d8dc9d59525b9d195c995cdd0819985a5b1959605a1b815260200192915050565b6000613c616021836146f0565b7f4e6f7420656e6f75676820616c6c6f77616e636520666f72207472616e7366658152603960f91b602082015260400192915050565b6000613ca4600e836146f0565b6d4e6f7420636f6d70617469626c6560901b815260200192915050565b6000613cce6026836146f0565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000613d166020836146f0565b7f496e76616c6964206861743a206c656e677468206e6f74206d61746368696e67815260200192915050565b6000613d4f600e836146f0565b6d125b9d985b1a59081a185d08125160921b815260200192915050565b6000613d79601b836146f0565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000613db26028836146f0565b7f496e76616c6964206861743a20726563697069656e742073686f756c64206e6f815267074206265203078360c41b602082015260400192915050565b6000613dfc6014836146f0565b731d1bdad95b88185c1c1c9bdd994819985a5b195960621b815260200192915050565b6000613e2c6029836146f0565b7f546865206c6962726172792068617320616c7265616479206265656e20696e698152683a34b0b634bd32b21760b91b602082015260400192915050565b6000613e77602e836146f0565b7f41646d696e2063616e206f6e6c79206368616e67652068617420666f7220636f81526d6e7472616374206164647265737360901b602082015260400192915050565b6000613ec76018836146f0565b7f7372632073686f756c64206e6f7420657175616c206473740000000000000000815260200192915050565b6000613f00601c836146f0565b7f4e6f7420656e6f7567682062616c616e636520746f2072656465656d00000000815260200192915050565b6000613f396032836146f0565b7f4e65772073747261746567792073686f756c642068617665207468652073616d81527119481d5b99195c9b1e5a5b99c8185cdcd95d60721b602082015260400192915050565b6000613f8d6015836146f0565b741d1bdad95b881d1c985b9cd9995c8819985a5b1959605a1b815260200192915050565b6000613fbe6021836146f0565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b60006140016020836146f0565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b600061403a601e836146f0565b7f4e6f7420656e6f7567682062616c616e636520746f207472616e736665720000815260200192915050565b6000614073601c836146f0565b7f52656465656d20616d6f756e742063616e6e6f74206265207a65726f00000000815260200192915050565b60006140ac6014836146f0565b734e6f7420656e6f75676820616c6c6f77616e636560601b815260200192915050565b60006140dc6032836146f0565b7f496e76616c696c64206861743a206d6178696d756d206e756d626572206f66208152711c9958da5c1a595b9d1cc81c995858da195960721b602082015260400192915050565b60006141306033836146f0565b7f546865206c696272617279206973206c6f636b65642e204e6f206469726563748152721013b1b0b636139034b99030b63637bbb2b21760691b602082015260400192915050565b6000614185602f836146f0565b7f496e76616c6964206861743a2070726f706f7274696f6e2073686f756c64206281526e065206c6172676572207468616e203608c1b602082015260400192915050565b60006141d6601f836146f0565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b600061420f6023836146f0565b7f496e76616c6964206861743a206174206c65617374206f6e6520726563697069815262195b9d60ea1b602082015260400192915050565b80516101008301906142598482613bd9565b50602082015161426c6020850182613bd9565b50604082015161427f6040850182613bd9565b5060608201516142926060850182613bd9565b5060808201516142a56080850182613bd9565b5060a08201516142b860a0850182613bd9565b5060c08201516142cb60c0850182613bd9565b5060e0820151611bc060e0850182613bd9565b805160408301906142ef8482613bd9565b506020820151611bc06020850182613bd9565b805160608301906143138482613bd9565b5060208201516143266020850182613bd9565b506040820151611bc06040850182613bd9565b613b1a81614720565b602081016109488284613b20565b6040810161435e8285613b11565b61120b6020830184613b20565b606081016143798286613b11565b6143866020830185613b20565b611a156040830184613bd9565b604081016143a18285613b20565b61120b6020830184613bd9565b604080825281016143bf8185613b29565b90508181036020830152611a158184613b82565b602081016109488284613bd0565b606081016143ef8286613bd0565b6143866020830185613bd9565b602081016109488284613bd9565b602081016109488284613be2565b6020808252810161120b8184613beb565b6020808252810161094881613c23565b6020808252810161094881613c54565b6020808252810161094881613c97565b6020808252810161094881613cc1565b6020808252810161094881613d09565b6020808252810161094881613d42565b6020808252810161094881613d6c565b6020808252810161094881613da5565b6020808252810161094881613def565b6020808252810161094881613e1f565b6020808252810161094881613e6a565b6020808252810161094881613eba565b6020808252810161094881613ef3565b6020808252810161094881613f2c565b6020808252810161094881613f80565b6020808252810161094881613fb1565b6020808252810161094881613ff4565b602080825281016109488161402d565b6020808252810161094881614066565b602080825281016109488161409f565b60208082528101610948816140cf565b6020808252810161094881614123565b6020808252810161094881614178565b60208082528101610948816141c9565b6020808252810161094881614202565b61010081016109488284614247565b6040810161094882846142de565b606081016109488284614302565b606081016145f28286613bd9565b81810360208301526146048185613b29565b905081810360408301526146188184613b82565b95945050505050565b604081016143a18285613bd9565b606081016143ef8286613bd9565b60a0810161464b8288613bd9565b6146586020830187613bd9565b6146656040830186613bd9565b6146726060830185613bd9565b61467f6080830184613bd9565b9695505050505050565b602081016109488284614339565b60405181810167ffffffffffffffff811182821017156146b657600080fd5b604052919050565b600067ffffffffffffffff8211156146d557600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b600061094882614714565b151590565b6000610948826146f9565b6001600160a01b031690565b63ffffffff1690565b600061094882614709565b82818337506000910152565b60005b8381101561475b578181015183820152602001614743565b83811115611bc05750506000910152565b601f01601f191690565b61477f816146f9565b81146114b457600080fd5b61477f81614704565b61477f8161095b565b61477f8161470956feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa365627a7a7231582026d01d00f98c94a6961a95c1f476a0eeaa6de84370beaded76c70f1e1b821a4d6c6578706572696d656e74616cf564736f6c634300050c0040",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103a45760003560e01c806370a08231116101e9578063c034d0db1161010f578063d8884795116100ad578063f04bf8b31161007c578063f04bf8b314610757578063f2fde38b14610779578063fc0c546a1461078c578063fdbbf8ac14610794576103a4565b8063d888479514610713578063db006a7514610729578063dd62ed3e1461073c578063e192782b1461074f576103a4565b8063c4d66de8116100e9578063c4d66de8146106c7578063d007c644146106da578063d271be3f146106ed578063d3ac25c414610700576103a4565b8063c034d0db146104f5578063c1a2007d14610431578063c200659e146106bf576103a4565b80638f32d59b11610187578063a9059cbb11610156578063a9059cbb14610689578063b2bdfa7b1461069c578063b5dbfc1a146106a4578063bf5bfdfb146106b7576103a4565b80638f32d59b1461065357806395d89b411461065b578063a0712d6814610663578063a3a7e7f314610676576103a4565b806377ede051116101c357806377ede0511461062557806381c8d895146103d257806384d4b410146106385780638da5cb5b1461064b576103a4565b806370a0823114610602578063715018a61461061557806371ee46eb1461061d576103a4565b8063313ce567116102ce5780634d12d4b61161026c5780635cde50551161023b5780635cde5055146105a35780635e5c06e2146105b657806363152a50146105da5780636b4169c3146105ed576103a4565b80634d12d4b6146105535780634fd7c0dd1461056657806352d1902d14610586578063556043ef1461058e576103a4565b80633e20a929116102a85780633e20a9291461051057806346951954146105185780634929fbf71461052d578063496cc16414610540576103a4565b8063313ce567146104ed57806333a581d2146104f5578063388c0b8c146104fd576103a4565b8063158ef93e1161034657806323b872dd1161031557806323b872dd1461049f57806328cdfaeb146104b25780632f2ba814146104d25780632f4350c2146104e5576103a4565b8063158ef93e1461045957806318160ddd146104615780631cda95d514610469578063226e835c1461048a576103a4565b806306fdde031161038257806306fdde0314610409578063095ea7b31461041e57806310f3a6d81461043157806313e23e4114610446576103a4565b80630290cbc8146103a9578063039ab887146103d2578063054ab01a146103e7575b600080fd5b6103bc6103b7366004613799565b6107a7565b6040516103c991906143d3565b60405180910390f35b6103da61081a565b6040516103c991906143fc565b6103fa6103f5366004613799565b610826565b6040516103c9939291906145e4565b610411610855565b6040516103c99190614418565b6103bc61042c36600461385c565b6108e0565b61043961094e565b6040516103c99190614342565b6103da610454366004613799565b61095e565b6103bc610980565b6103da610990565b61047c6104773660046139fd565b610996565b6040516103c99291906143ae565b6104926109ac565b6040516103c99190614689565b6103bc6104ad36600461380f565b6109b4565b6104c56104c0366004613799565b610a0c565b6040516103c991906145b9565b6103bc6104e03660046139fd565b610b5d565b6103bc610ba2565b6103da610c0a565b6103da610c10565b6103bc61050b366004613aa2565b610c16565b6103da610c6b565b61052b610526366004613799565b610c75565b005b61052b61053b36600461385c565b610d0a565b6103da61054e366004613799565b610d61565b61052b61056136600461396c565b610d73565b6105796105743660046139fd565b610fb0565b6040516103c991906145d6565b6103da610ff2565b610596611016565b6040516103c9919061440a565b6103da6105b136600461388c565b611025565b6105c96105c4366004613799565b6110dc565b6040516103c995949392919061463d565b6103da6105e83660046137d5565b61110b565b6105f5611128565b6040516103c991906145c8565b6103da610610366004613799565b611158565b61052b611176565b6103da6111e4565b6103da610633366004613799565b6111ea565b6103bc6106463660046137d5565b611212565b61043961125c565b6103bc61126b565b61041161127c565b6103bc6106713660046139fd565b6112d7565b6103bc610684366004613799565b6112ed565b6103bc61069736600461385c565b611338565b61043961138a565b6103bc6106b2366004613a1b565b611399565b6103da611459565b6103da61145f565b61052b6106d536600461394e565b611465565b6103bc6106e8366004613799565b6114b7565b6103bc6106fb36600461385c565b6114cd565b61052b61070e366004613799565b6114ee565b61071b61192a565b6040516103c9929190614621565b6103bc6107373660046139fd565b61193f565b6103da61074a3660046137d5565b611960565b6103da61198b565b61076a6107653660046139fd565b611990565b6040516103c99392919061462f565b61052b610787366004613799565b6119b1565b6105966119de565b6103da6107a2366004613799565b6119ed565b60018054810190819055600090336107be81611a1d565b6001600160a01b0381166000908152600c60205260409020600101546107e5908590611bc6565b600192505060015481146108145760405162461bcd60e51b815260040161080b90614599565b60405180910390fd5b50919050565b670de0b6b3a764000081565b6001600160a01b0381166000908152600c602052604090205460608061084b83611d20565b9395909450915050565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156108d85780601f106108ad576101008083540402835291602001916108d8565b820191906000526020600020905b8154815290600101906020018083116108bb57829003601f168201915b505050505081565b336000818152600a602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061093a9087906143fc565b60405180910390a360019150505b92915050565b6006546001600160a01b03165b90565b6001600160a01b0381166000908152600c60205260409020600401545b919050565b600054600160a01b900460ff1681565b60055481565b6060806109a283611d20565b9094909350915050565b63ffffffff81565b600180548101908190556000906109ca85611a1d565b6109d633868686611e82565b6109df84611a1d565b600191506001548114610a045760405162461bcd60e51b815260040161080b90614599565b509392505050565b610a14613430565b6001600160a01b0382166000908152600c6020908152604091829020805484526001810154918401919091526002810154918301919091526004810154606083015260058101546080830152610a69816120fe565b60a08301526001600160a01b0383166000908152600d60205260408120805460c08501528254909190600b9060001914610aa4578354610aa7565b60005b81548110610ab157fe5b90600052602060002090600202019050826000015460001480610ad657508254600019145b15610af757610aed84602001518560400151612151565b60e0850152610b55565b60005b6001820154811015610b5357836003016000836000018381548110610b1b57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460e0860180519091019052600101610afa565b505b505050919050565b60018054810190819055600090610b74338461216c565b610b7d33611a1d565b6001915060015481146108145760405162461bcd60e51b815260040161080b90614599565b6001805481019081905560009033610bb981611a1d565b6001600160a01b0381166000908152600c6020526040902060010154610be0908290611bc6565b60019250506001548114610c065760405162461bcd60e51b815260040161080b90614599565b5090565b60045481565b60001981565b60018054810190819055600090610c2d338461216c565b610c3684612252565b610c3f33611a1d565b600191506001548114610c645760405162461bcd60e51b815260040161080b90614599565b5092915050565b600b546000190190565b610c7d61126b565b610c995760405162461bcd60e51b815260040161080b90614529565b600054600160a01b900460ff161515600114610cc75760405162461bcd60e51b815260040161080b90614579565b610cd081612550565b7f34459cf4c63f38e9b4af4ff8f74035bad6157484e669ffde70188afdf9917c6881604051610cff9190614342565b60405180910390a150565b610d1261126b565b610d2e5760405162461bcd60e51b815260040161080b90614529565b610d3782612623565b610d535760405162461bcd60e51b815260040161080b906144c9565b610d5d828261216c565b5050565b600d6020526000908152604090205481565b600054600160a01b900460ff1615610d9d5760405162461bcd60e51b815260040161080b906144b9565b610da5612629565b600080546001600160a01b03191633179055600180558251610dce906002906020860190613475565b508151610de2906003906020850190613475565b506004818155670de0b6b3a7640000600955600680546001600160a01b0319166001600160a01b03878116919091179182905560408051636f307dc360e01b815290519290911692636f307dc3928282019260209290829003018186803b158015610e4c57600080fd5b505afa158015610e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e8491908101906137b7565b600780546001600160a01b03929092166001600160a01b031990921691909117905560408051600081830181815260608301845282528251818152602080820190945283830152600b8054600181018083559190925282518051919460029093027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90192610f17928492909101906134ef565b506020828101518051610f309260018501920190613550565b5050600080525050600e6020526000197fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c556006546009546040517faa54229fa6d6451d2cd5d13b5bc60f1230a0f79091118926e9b95d8f4811713a92610fa2926001600160a01b0390911691614393565b60405180910390a150505050565b610fb86135fb565b6000828152600e60209081526040909120805483526001810154918301919091526002810154610fe79061263e565b604083015250919050565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf790565b6006546001600160a01b031681565b6001805481019081905560408051602080880282810182019093528782526000939261109f92918a918a9182919085019084908082843760009201919091525050604080516020808b0282810182019093528a82529093508a9250899182918501908490808284376000920191909152506126dc92505050565b915082156110b1576110b1338361216c565b60015481146110d25760405162461bcd60e51b815260040161080b90614599565b5095945050505050565b600c60205260009081526040902080546001820154600283015460048401546005909401549293919290919085565b600a60209081526000928352604080842090915290825290205481565b61113061361c565b600061113d60085461291d565b60408051808201909152600554815291016020820152905090565b6001600160a01b03166000908152600c602052604090206001015490565b61117e61126b565b61119a5760405162461bcd60e51b815260040161080b90614529565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60085481565b6001600160a01b0381166000908152600c6020526040812061120b816120fe565b9392505050565b6001805481019081905560009061122884611a1d565b6001600160a01b0384166000908152600c602052604090206001015461125390339086908690611e82565b610c3f83611a1d565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108d85780601f106108ad576101008083540402835291602001916108d8565b60018054810190819055600090610b7483612252565b600180548101908190556000903361130481611a1d565b6001600160a01b0381166000908152600c602052604090206001015461132f90829081908790611e82565b6107e584611a1d565b600180548101908190556000903361134f81611a1d565b61135b81828787611e82565b61136485611a1d565b60019250506001548114610c645760405162461bcd60e51b815260040161080b90614599565b6000546001600160a01b031681565b6001805481019081905560408051602080870282810182019093528682526000939284926114159290918a918a91829185019084908082843760009201919091525050604080516020808b0282810182019093528a82529093508a9250899182918501908490808284376000920191909152506126dc92505050565b9050611421338261216c565b61142a88612252565b61143333611a1d565b600192505060015481146110d25760405162461bcd60e51b815260040161080b90614599565b60015481565b60095481565b6114b4816040518060400160405280600e81526020016d52656465656d61626c652044414960901b815250604051806040016040528060048152602001637244414960e01b8152506012610d73565b50565b60018054810190819055600090610b7d83611a1d565b60018054810190819055600090336114e481611a1d565b6113648585611bc6565b6001805481019081905561150061126b565b61151c5760405162461bcd60e51b815260040161080b90614529565b60075460408051636f307dc360e01b8152905184926001600160a01b039081169290841691636f307dc391600480820192602092909190829003018186803b15801561156757600080fd5b505afa15801561157b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061159f91908101906137b7565b6001600160a01b0316146115c55760405162461bcd60e51b815260040161080b906144f9565b600680546001600160a01b038381166001600160a01b0319831617909255604080516317a1a86160e11b8152815193909216926000928492632f4350c29260048084019382900301818787803b15801561161e57600080fd5b505af1158015611632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116569190810190613ac1565b506007546040516370a0823160e01b81529192506000916001600160a01b03909116906370a082319061168d903090600401614342565b60206040518083038186803b1580156116a557600080fd5b505afa1580156116b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116dd9190810190613930565b60075460065460405163095ea7b360e01b81529293506001600160a01b039182169263095ea7b3926117159216908590600401614393565b602060405180830381600087803b15801561172f57600080fd5b505af1158015611743573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117679190810190613912565b6117835760405162461bcd60e51b815260040161080b906144a9565b600654604051630305da4f60e61b81526000916001600160a01b03169063c17693c0906117b49085906004016143fc565b602060405180830381600087803b1580156117ce57600080fd5b505af11580156117e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118069190810190613930565b6006549091506001600160a01b0385811691161461188457836001600160a01b031663f2fde38b61183561125c565b6040518263ffffffff1660e01b81526004016118519190614342565b600060405180830381600087803b15801561186b57600080fd5b505af115801561187f573d6000803e3d6000fd5b505050505b600061189160085461297c565b6009549091506118b7836118ab878463ffffffff61299f16565b9063ffffffff6129d916565b6009556118c382612a1b565b6008556009546040517faa54229fa6d6451d2cd5d13b5bc60f1230a0f79091118926e9b95d8f4811713a916118fa918c9190614393565b60405180910390a1505050505050506001548114610d5d5760405162461bcd60e51b815260040161080b90614599565b6008546000906119398161291d565b91509091565b600180548101908190556000903361195681611a1d565b6107e58185611bc6565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b603281565b600e6020526000908152604090208054600182015460029092015490919083565b6119b961126b565b6119d55760405162461bcd60e51b815260040161080b90614529565b6114b481612a3d565b6007546001600160a01b031681565b6001600160a01b0381166000908152600c6020526040812060058101548290611a159061263e565b949350505050565b6001600160a01b038082166000908152600c60209081526040808320600d8352818420600654835163a6afed9560e01b815293519296919591169363a6afed95936004808201949293918390030190829087803b158015611a7d57600080fd5b505af1158015611a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611ab59190810190613912565b611ad15760405162461bcd60e51b815260040161080b90614429565b6000611adc836120fe565b90508015611bc0578154611af6908263ffffffff612abe16565b82556002830154611b0d908263ffffffff612abe16565b60028401556001830154611b27908263ffffffff612abe16565b6001840155600554611b3f908263ffffffff612abe16565b6005556040516001600160a01b038516907f16cbc685358ca7d4e6b273dcdf2cb5d18c80b950aa2319b519756cd016233a6c90611b7d9084906143fc565b60405180910390a2836001600160a01b031660006001600160a01b03166000805160206147a683398151915283604051611bb791906143fc565b60405180910390a35b50505050565b336000908152600c6020526040902081611bf25760405162461bcd60e51b815260040161080b90614549565b8060010154821115611c165760405162461bcd60e51b815260040161080b906144e9565b611c203383612ae3565b6001810154611c35908363ffffffff612b9f16565b6001820155600554611c4d908363ffffffff612b9f16565b60055560075460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611c829086908690600401614393565b602060405180830381600087803b158015611c9c57600080fd5b505af1158015611cb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611cd49190810190613912565b611cf05760405162461bcd60e51b815260040161080b90614509565b60405160009033906000805160206147a683398151915290611d139086906143fc565b60405180910390a3505050565b6060808215801590611d3457506000198314155b15611e6357611d41613636565b600b8481548110611d4e57fe5b906000526020600020906002020160405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015611dc057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611da2575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e4457602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611e075790505b5050505050815250509050806000015192508060200151915050611e7d565b505060408051600080825260208201908152818301909252905b915091565b816001600160a01b0316836001600160a01b03161415611eb45760405162461bcd60e51b815260040161080b906144d9565b6001600160a01b0383166000908152600c6020526040902060010154811115611eef5760405162461bcd60e51b815260040161080b90614539565b60006001600160a01b038581169085161415611f0e5750600019611f36565b506001600160a01b038084166000908152600a60209081526040808320938816835292905220545b81811015611f565760405162461bcd60e51b815260040161080b90614439565b6000611f68828463ffffffff612b9f16565b6001600160a01b0386166000908152600c602052604081206001015491925090611f98908563ffffffff612b9f16565b6001600160a01b0386166000908152600c602052604081206001015491925090611fc8908663ffffffff612abe16565b90506000198414611ffc576001600160a01b038088166000908152600a60209081526040808320938c168352929052208390555b60006120088887612be1565b9050612015878783612c90565b6001600160a01b038089166000818152600c60205260408082206001808201899055948c16835290822090930185905552541580159061206b57506001600160a01b0387166000908152600c6020526040902054155b801561209157506001600160a01b0388166000908152600c602052604090205460001914155b156120ba576001600160a01b0388166000908152600c60205260409020546120ba90889061216c565b866001600160a01b0316886001600160a01b03166000805160206147a6833981519152886040516120eb91906143fc565b60405180910390a3505050505050505050565b60008061210e836005015461263e565b905061212b83600201548460040154612abe90919063ffffffff16565b811115612147578260020154836004015482030391505061097b565b600091505061097b565b60008183101561216357506000610948565b50808203610948565b60001981148061217d5750600b5481105b6121995760405162461bcd60e51b815260040161080b90614479565b6001600160a01b0382166000908152600c602090815260408083208054808552600e909352818420858552919093206001840154156121ff5760006121e2878660010154612be1565b86865560018601549091506121f990889083612c90565b50612203565b8484555b815460001901825580546001018155604051859084906001600160a01b038916907f356f094000bcd3968ad51bf92c9d115ed7294626dea8ae4cc5b24273702e111390600090a4505050505050565b600754604051636eb1769f60e11b815282916001600160a01b03169063dd62ed3e906122849033903090600401614350565b60206040518083038186803b15801561229c57600080fd5b505afa1580156122b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122d49190810190613930565b10156122f25760405162461bcd60e51b815260040161080b90614559565b336000818152600c60205260409081902060075491516323b872dd60e01b815290926001600160a01b03909216916323b872dd9161233791903090879060040161436b565b602060405180830381600087803b15801561235157600080fd5b505af1158015612365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123899190810190613912565b6123a55760405162461bcd60e51b815260040161080b90614509565b60075460065460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926123db929116908690600401614393565b602060405180830381600087803b1580156123f557600080fd5b505af1158015612409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061242d9190810190613912565b6124495760405162461bcd60e51b815260040161080b906144a9565b600654604051630305da4f60e61b81526000916001600160a01b03169063c17693c09061247a9086906004016143fc565b602060405180830381600087803b15801561249457600080fd5b505af11580156124a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124cc9190810190613930565b6005549091506124e2908463ffffffff612abe16565b60055560018201546124fa908463ffffffff612abe16565b6001830155600854612512908263ffffffff612abe16565b60085560006125208261297c565b905061252d338583612c90565b60405133906000906000805160206147a683398151915290611bb79088906143fc565b806001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561258957600080fd5b505afa15801561259d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125c19190810190613930565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7146125ff5760405162461bcd60e51b815260040161080b90614449565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf755565b3b151590565b6000805460ff60a01b1916600160a01b179055565b60006109486009546118ab600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561269757600080fd5b505afa1580156126ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126cf9190810190613930565b859063ffffffff61299f16565b60008060008451116127005760405162461bcd60e51b815260040161080b906145a9565b6032845111156127225760405162461bcd60e51b815260040161080b90614569565b82518451146127435760405162461bcd60e51b815260040161080b90614469565b506000805b84518210156127f957600084838151811061275f57fe5b602002602001015163ffffffff161161278a5760405162461bcd60e51b815260040161080b90614589565b60006001600160a01b03168583815181106127a157fe5b60200260200101516001600160a01b031614156127d05760405162461bcd60e51b815260040161080b90614499565b8382815181106127dc57fe5b602002602001015163ffffffff1681019050816001019150612748565b600091505b8351821015612863578063ffffffff801685848151811061281b57fe5b602002602001015163ffffffff16028161283157fe5b0484838151811061283e57fe5b602002602001019063ffffffff16908163ffffffff16815250508160010191506127fe565b604080518082019091528581526020808201869052600b80546001818101808455600093909352845180519195939460029093027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901926128c9928492909101906134ef565b5060208281015180516128e29260018501920190613550565b505050039250827f755babe5551737dcd4c723af196cff0ed1fa99a4c6957c62262d6b1425f864aa60405160405180910390a2505092915050565b6000610948670de0b6b3a76400006118ab600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561269757600080fd5b6000610948670de0b6b3a76400006118ab6009548561299f90919063ffffffff16565b6000826129ae57506000610948565b828202828482816129bb57fe5b041461120b5760405162461bcd60e51b815260040161080b90614519565b600061120b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f38565b600954600090610948906118ab84670de0b6b3a764000063ffffffff61299f16565b6001600160a01b038116612a635760405162461bcd60e51b815260040161080b90614459565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008282018381101561120b5760405162461bcd60e51b815260040161080b90614489565b60065460405163852a12e360e01b81526000916001600160a01b03169063852a12e390612b149085906004016143fc565b602060405180830381600087803b158015612b2e57600080fd5b505af1158015612b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b669190810190613930565b9050612b718161297c565b50612b7c8383612f6f565b806008541115612b9457600880548290039055612b9a565b60006008555b505050565b600061120b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061325c565b6006546040805163a6afed9560e01b815290516000926001600160a01b03169163a6afed9591600480830192602092919082900301818787803b158015612c2757600080fd5b505af1158015612c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c5f9190810190613912565b612c7b5760405162461bcd60e51b815260040161080b90614429565b612c8482613288565b90506109488383612f6f565b6001600160a01b0383166000908152600c602052604081208054909190600b9060001914612cbf578254612cc2565b60005b81548110612ccc57fe5b600091825260208220600290910201805490925015612ee95750600084845b6001840154831015612ee2576000600c6000866000018681548110612d0c57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001812060018701549092506000190185149081612d975763ffffffff8016612d8a886001018881548110612d5d57fe5b600091825260209091206008820401548d916007166004026101000a900463ffffffff9081169061299f16565b81612d9157fe5b04612d99565b845b9050612de5818960030160008a6000018a81548110612db457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549063ffffffff612abe16565b886003016000896000018981548110612dfa57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556004830154612e34908263ffffffff612abe16565b6004840155612e438582612151565b9450600082612e725763ffffffff8016612e65896001018981548110612d5d57fe5b81612e6c57fe5b04612e74565b845b6005850154909150612e8c908263ffffffff612abe16565b6005850155612e9b8582612151565b9450612ed38c896000018981548110612eb057fe5b6000918252602090912001548b546001600160a01b039091169060018686613327565b50505050826001019250612ceb565b5050612f30565b6004830154612efe908663ffffffff612abe16565b60048401556005830154612f18908563ffffffff612abe16565b60058401558254612f30908790819060018989613327565b505050505050565b60008183612f595760405162461bcd60e51b815260040161080b9190614418565b506000838581612f6557fe5b0495945050505050565b6001600160a01b0382166000908152600c602052604081208054909190600b9060001914612f9e578254612fa1565b60005b81548110612fab57fe5b906000526020600020906002020190506000612fcf83600101548460020154612151565b905083811115612fdc5750825b6000612fe782613288565b8354909150156131e857818160005b60018601548110156131e0576000600c600088600001848154811061301757fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120600189015490925060001901831490816130a25763ffffffff80166130958a600101868154811061306857fe5b600091825260209091206008820401548b916007166004026101000a900463ffffffff9081169061299f16565b8161309c57fe5b046130a4565b855b90506130b4836004015482612151565b83600401819055506130ff8a60030160008b60000187815481106130d457fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205482612151565b8a60030160008b600001878154811061311457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556131438682612151565b95506000826131725763ffffffff80166131658b600101878154811061306857fe5b8161316c57fe5b04613174565b855b9050613184846005015482612151565b60058501556131938682612151565b955061319e846133fe565b6131d18d8b60000187815481106131b157fe5b60009182526020822001548e546001600160a01b03909116918686613327565b50505050806001019050612ff6565b50505061322b565b6131f6846004015483612151565b6004850155600584015461320a9082612151565b6005850155613218846133fe565b61322b8687866000015460008686613327565b81851115612f305761323e828603613288565b905061324e846005015482612151565b6005850155612f30846133fe565b600081848411156132805760405162461bcd60e51b815260040161080b9190614418565b505050900390565b6000610948600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b1580156132db57600080fd5b505afa1580156132ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133139190810190613930565b6009546118ab90859063ffffffff61299f16565b6000600e6000868152602001908152602001600020905084866001600160a01b0316886001600160a01b03167f7fb238306664f9cc50083b666d8979f411dd72154c6e9bf558c76b39e14e7d29878787604051613386939291906143e1565b60405180910390a483156133cd5760018101546133a9908463ffffffff612abe16565b600182015560028101546133c3908363ffffffff612abe16565b60028201556133f5565b6133db816001015484612151565b600182015560028101546133ef9083612151565b60028201555b50505050505050565b600061340d826005015461263e565b90508160040154810382600201541115610d5d5760048201549003600290910155565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106134b657805160ff19168380011785556134e3565b828001600101855582156134e3579182015b828111156134e35782518255916020019190600101906134c8565b50610c06929150613650565b828054828255906000526020600020908101928215613544579160200282015b8281111561354457825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061350f565b50610c0692915061366a565b828054828255906000526020600020906007016008900481019282156135ef5791602002820160005b838211156135bd57835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302613579565b80156135ed5782816101000a81549063ffffffff02191690556004016020816003010492830192600103026135bd565b505b50610c0692915061368e565b60405180606001604052806000815260200160008152602001600081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060608152602001606081525090565b61095b91905b80821115610c065760008155600101613656565b61095b91905b80821115610c065780546001600160a01b0319168155600101613670565b61095b91905b80821115610c0657805463ffffffff19168155600101613694565b803561094881614776565b805161094881614776565b60008083601f8401126136d757600080fd5b50813567ffffffffffffffff8111156136ef57600080fd5b60208301915083602082028301111561370757600080fd5b9250929050565b80356109488161478a565b80516109488161478a565b805161094881614793565b80356109488161479c565b600082601f83011261374b57600080fd5b813561375e613759826146be565b614697565b9150808252602083016020830185838301111561377a57600080fd5b613785838284614734565b50505092915050565b803561094881614793565b6000602082840312156137ab57600080fd5b6000611a1584846136af565b6000602082840312156137c957600080fd5b6000611a1584846136ba565b600080604083850312156137e857600080fd5b60006137f485856136af565b9250506020613805858286016136af565b9150509250929050565b60008060006060848603121561382457600080fd5b600061383086866136af565b9350506020613841868287016136af565b92505060406138528682870161378e565b9150509250925092565b6000806040838503121561386f57600080fd5b600061387b85856136af565b92505060206138058582860161378e565b6000806000806000606086880312156138a457600080fd5b853567ffffffffffffffff8111156138bb57600080fd5b6138c7888289016136c5565b9550955050602086013567ffffffffffffffff8111156138e657600080fd5b6138f2888289016136c5565b935093505060406139058882890161370e565b9150509295509295909350565b60006020828403121561392457600080fd5b6000611a158484613719565b60006020828403121561394257600080fd5b6000611a158484613724565b60006020828403121561396057600080fd5b6000611a15848461372f565b6000806000806080858703121561398257600080fd5b600061398e878761372f565b945050602085013567ffffffffffffffff8111156139ab57600080fd5b6139b78782880161373a565b935050604085013567ffffffffffffffff8111156139d457600080fd5b6139e08782880161373a565b92505060606139f18782880161378e565b91505092959194509250565b600060208284031215613a0f57600080fd5b6000611a15848461378e565b600080600080600060608688031215613a3357600080fd5b6000613a3f888861378e565b955050602086013567ffffffffffffffff811115613a5c57600080fd5b613a68888289016136c5565b9450945050604086013567ffffffffffffffff811115613a8757600080fd5b613a93888289016136c5565b92509250509295509295909350565b60008060408385031215613ab557600080fd5b600061387b858561378e565b60008060408385031215613ad457600080fd5b6000613ae08585613724565b925050602061380585828601613724565b6000613afd8383613b20565b505060200190565b6000613afd8383614339565b613b1a81614729565b82525050565b613b1a816146f9565b6000613b34826146ec565b613b3e81856146f0565b9350613b49836146e6565b8060005b83811015613b77578151613b618882613af1565b9750613b6c836146e6565b925050600101613b4d565b509495945050505050565b6000613b8d826146ec565b613b9781856146f0565b9350613ba2836146e6565b8060005b83811015613b77578151613bba8882613b05565b9750613bc5836146e6565b925050600101613ba6565b613b1a81614704565b613b1a8161095b565b613b1a81614709565b6000613bf6826146ec565b613c0081856146f0565b9350613c10818560208601614740565b613c198161476c565b9093019392505050565b6000613c306015836146f0565b741858d8dc9d59525b9d195c995cdd0819985a5b1959605a1b815260200192915050565b6000613c616021836146f0565b7f4e6f7420656e6f75676820616c6c6f77616e636520666f72207472616e7366658152603960f91b602082015260400192915050565b6000613ca4600e836146f0565b6d4e6f7420636f6d70617469626c6560901b815260200192915050565b6000613cce6026836146f0565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000613d166020836146f0565b7f496e76616c6964206861743a206c656e677468206e6f74206d61746368696e67815260200192915050565b6000613d4f600e836146f0565b6d125b9d985b1a59081a185d08125160921b815260200192915050565b6000613d79601b836146f0565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000613db26028836146f0565b7f496e76616c6964206861743a20726563697069656e742073686f756c64206e6f815267074206265203078360c41b602082015260400192915050565b6000613dfc6014836146f0565b731d1bdad95b88185c1c1c9bdd994819985a5b195960621b815260200192915050565b6000613e2c6029836146f0565b7f546865206c6962726172792068617320616c7265616479206265656e20696e698152683a34b0b634bd32b21760b91b602082015260400192915050565b6000613e77602e836146f0565b7f41646d696e2063616e206f6e6c79206368616e67652068617420666f7220636f81526d6e7472616374206164647265737360901b602082015260400192915050565b6000613ec76018836146f0565b7f7372632073686f756c64206e6f7420657175616c206473740000000000000000815260200192915050565b6000613f00601c836146f0565b7f4e6f7420656e6f7567682062616c616e636520746f2072656465656d00000000815260200192915050565b6000613f396032836146f0565b7f4e65772073747261746567792073686f756c642068617665207468652073616d81527119481d5b99195c9b1e5a5b99c8185cdcd95d60721b602082015260400192915050565b6000613f8d6015836146f0565b741d1bdad95b881d1c985b9cd9995c8819985a5b1959605a1b815260200192915050565b6000613fbe6021836146f0565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b60006140016020836146f0565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b600061403a601e836146f0565b7f4e6f7420656e6f7567682062616c616e636520746f207472616e736665720000815260200192915050565b6000614073601c836146f0565b7f52656465656d20616d6f756e742063616e6e6f74206265207a65726f00000000815260200192915050565b60006140ac6014836146f0565b734e6f7420656e6f75676820616c6c6f77616e636560601b815260200192915050565b60006140dc6032836146f0565b7f496e76616c696c64206861743a206d6178696d756d206e756d626572206f66208152711c9958da5c1a595b9d1cc81c995858da195960721b602082015260400192915050565b60006141306033836146f0565b7f546865206c696272617279206973206c6f636b65642e204e6f206469726563748152721013b1b0b636139034b99030b63637bbb2b21760691b602082015260400192915050565b6000614185602f836146f0565b7f496e76616c6964206861743a2070726f706f7274696f6e2073686f756c64206281526e065206c6172676572207468616e203608c1b602082015260400192915050565b60006141d6601f836146f0565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b600061420f6023836146f0565b7f496e76616c6964206861743a206174206c65617374206f6e6520726563697069815262195b9d60ea1b602082015260400192915050565b80516101008301906142598482613bd9565b50602082015161426c6020850182613bd9565b50604082015161427f6040850182613bd9565b5060608201516142926060850182613bd9565b5060808201516142a56080850182613bd9565b5060a08201516142b860a0850182613bd9565b5060c08201516142cb60c0850182613bd9565b5060e0820151611bc060e0850182613bd9565b805160408301906142ef8482613bd9565b506020820151611bc06020850182613bd9565b805160608301906143138482613bd9565b5060208201516143266020850182613bd9565b506040820151611bc06040850182613bd9565b613b1a81614720565b602081016109488284613b20565b6040810161435e8285613b11565b61120b6020830184613b20565b606081016143798286613b11565b6143866020830185613b20565b611a156040830184613bd9565b604081016143a18285613b20565b61120b6020830184613bd9565b604080825281016143bf8185613b29565b90508181036020830152611a158184613b82565b602081016109488284613bd0565b606081016143ef8286613bd0565b6143866020830185613bd9565b602081016109488284613bd9565b602081016109488284613be2565b6020808252810161120b8184613beb565b6020808252810161094881613c23565b6020808252810161094881613c54565b6020808252810161094881613c97565b6020808252810161094881613cc1565b6020808252810161094881613d09565b6020808252810161094881613d42565b6020808252810161094881613d6c565b6020808252810161094881613da5565b6020808252810161094881613def565b6020808252810161094881613e1f565b6020808252810161094881613e6a565b6020808252810161094881613eba565b6020808252810161094881613ef3565b6020808252810161094881613f2c565b6020808252810161094881613f80565b6020808252810161094881613fb1565b6020808252810161094881613ff4565b602080825281016109488161402d565b6020808252810161094881614066565b602080825281016109488161409f565b60208082528101610948816140cf565b6020808252810161094881614123565b6020808252810161094881614178565b60208082528101610948816141c9565b6020808252810161094881614202565b61010081016109488284614247565b6040810161094882846142de565b606081016109488284614302565b606081016145f28286613bd9565b81810360208301526146048185613b29565b905081810360408301526146188184613b82565b95945050505050565b604081016143a18285613bd9565b606081016143ef8286613bd9565b60a0810161464b8288613bd9565b6146586020830187613bd9565b6146656040830186613bd9565b6146726060830185613bd9565b61467f6080830184613bd9565b9695505050505050565b602081016109488284614339565b60405181810167ffffffffffffffff811182821017156146b657600080fd5b604052919050565b600067ffffffffffffffff8211156146d557600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b600061094882614714565b151590565b6000610948826146f9565b6001600160a01b031690565b63ffffffff1690565b600061094882614709565b82818337506000910152565b60005b8381101561475b578181015183820152602001614743565b83811115611bc05750506000910152565b601f01601f191690565b61477f816146f9565b81146114b457600080fd5b61477f81614704565b61477f8161095b565b61477f8161470956feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa365627a7a7231582026d01d00f98c94a6961a95c1f476a0eeaa6de84370beaded76c70f1e1b821a4d6c6578706572696d656e74616cf564736f6c634300050c0040",
  "sourceMap": "398:233:28:-;;;;;358:6:16;:19;;-1:-1:-1;;;;;;358:19:16;367:10;358:19;;;;-1:-1:-1;;;;;425:6:16;;392:40;;358:6;;392:40;398:233:28;;;;;;",
  "deployedSourceMap": "398:233:28:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;398:233:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7796:266:19;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1129:67;;;:::i;:::-;;;;;;;;8901:312;;;;;;;;;:::i;:::-;;;;;;;;;;882:18:20;;;:::i;:::-;;;;;;;;3687:232:19;;;;;;;;;:::i;16132:135::-;;;:::i;:::-;;;;;;;;10282:194;;;;;;;;;:::i;683:23:20:-;;;:::i;1164:26::-;;;:::i;9266:203:19:-;;;;;;;;;:::i;:::-;;;;;;;;;1320:51;;;:::i;:::-;;;;;;;;5440:281;;;;;;;;;:::i;11394:1329::-;;;;;;;;;:::i;:::-;;;;;;;;8495:186;;;;;;;;;:::i;7191:206::-;;;:::i;1066:23:20:-;;;:::i;1202:57:19:-;;;:::i;6043:278::-;;;;;;;;;:::i;8739:104::-;;;:::i;16615:148::-;;;;;;;;;:::i;:::-;;16322:236;;;;;;;;;:::i;1899:58:20:-;;;;;;;;;:::i;1512:844:19:-;;;;;;;;;:::i;12777:377::-;;;;;;;;;:::i;:::-;;;;;;;;698:157:17;;;:::i;1233:30:20:-;;;:::i;:::-;;;;;;;;8114:329:19;;;;;;;;;:::i;1816:43:20:-;;;;;;;;;:::i;:::-;;;;;;;;;;;;1661:73;;;;;;;;;:::i;11000:336:19:-;;;:::i;:::-;;;;;;;;2480:113;;;;;;;;;:::i;1300:137:16:-;;;:::i;1435:39:20:-;;;:::i;10536:213:19:-;;;;;;;;;:::i;4847:283::-;;;;;;;;;:::i;515:77:16:-;;;:::i;866:90::-;;;:::i;972:20:20:-;;;:::i;5807:174:19:-;;;;;;;;;:::i;4524:265::-;;;;;;;;;:::i;4179:291::-;;;;;;;;;:::i;656:21:20:-;;;:::i;6393:390:19:-;;;;;;;;;:::i;784:28:20:-;;;:::i;1550:40::-;;;:::i;429:199:28:-;;;;;;;;;:::i;10803:137:19:-;;;;;;;;;:::i;7457:276::-;;;;;;;;;:::i;13690:2387::-;;;;;;;;;:::i;13389:234::-;;;:::i;:::-;;;;;;;;;6925:214;;;;;;;;;:::i;2871:169::-;;;;;;;;;:::i;1377:51::-;;;:::i;1993:50:20:-;;;;;;;;;:::i;:::-;;;;;;;;;;1586:107:16;;;;;;;;;:::i;1299:19:20:-;;;:::i;9971:254:19:-;;;;;;;;;:::i;7796:266::-;545:1:22;528:18;;;;;;;;7899:4:19;;7933:10;7953:24;7933:10;7953:19;:24::i;:::-;-1:-1:-1;;;;;8012:13:19;;;;;;:8;:13;;;;;:21;;;7987:47;;8002:8;;7987:14;:47::i;:::-;8051:4;8044:11;;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;;;;;;;;;;7796:266:19;;;;:::o;1129:67::-;1192:4;1129:67;:::o;8901:312::-;-1:-1:-1;;;;;9129:15:19;;9001:13;9129:15;;;:8;:15;;;;;:21;9028:27;;9188:18;9129:21;9188:11;:18::i;:::-;8901:312;;9160:46;;-1:-1:-1;8901:312:19;-1:-1:-1;;8901:312:19:o;882:18:20:-;;;;;;;;;;;;;;-1:-1:-1;;882:18:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3687:232:19:-;3785:10;3755:4;3805:23;;;:18;:23;;;;;;;;-1:-1:-1;;;;;3805:32:19;;;;;;;;;;:41;;;3861:30;3755:4;;3785:10;;;3861:30;;;;3840:6;;3861:30;;;;;;;;;;3908:4;3901:11;;;3687:232;;;;;:::o;16132:135::-;16256:3;;-1:-1:-1;;;;;16256:3:19;16132:135;;:::o;10282:194::-;-1:-1:-1;;;;;10424:15:19;;10368:14;10424:15;;;:8;:15;;;;;10456:13;;;10282:194;;;;:::o;683:23:20:-;;;-1:-1:-1;;;683:23:20;;;;;:::o;1164:26::-;;;;:::o;9266:203:19:-;9348:27;9377;9444:18;9456:5;9444:11;:18::i;:::-;9416:46;;;;-1:-1:-1;9266:203:19;-1:-1:-1;;9266:203:19:o;1320:51::-;1361:10;1320:51;:::o;5440:281::-;545:1:22;528:18;;;;;;;;5559:4:19;;5579:24;5599:3;5579:19;:24::i;:::-;5613:46;5630:10;5642:3;5647;5652:6;5613:16;:46::i;:::-;5669:24;5689:3;5669:19;:24::i;:::-;5710:4;5703:11;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;;5440:281:19;;;;;;:::o;11394:1329::-;11481:29;;:::i;:::-;-1:-1:-1;;;;;11552:15:19;;11526:23;11552:15;;;:8;:15;;;;;;;;;11591:13;;11577:27;;11630:15;;;;11614:13;;;:31;;;;11673:17;;;;11655:15;;;:35;;;;11714:13;;;;11700:11;;;:27;11761:23;;;;11737:21;;;:47;11820:29;11552:15;11820:20;:29::i;:::-;11795:22;;;:54;-1:-1:-1;;;;;11901:19:19;;11860:38;11901:19;;;:12;:19;;;;;11957:30;;11930:24;;;:57;12021:13;;11901:19;;11860:38;12016:4;;-1:-1:-1;;12021:28:19;:72;;12080:13;;12021:72;;;12064:1;12021:72;12016:78;;;;;;;;;;;;;;;;;;11998:96;;12108:7;:13;;;12125:1;12108:18;:50;;;-1:-1:-1;12130:13:19;;-1:-1:-1;;12130:28:19;12108:50;12104:590;;;12464:41;12474:5;:13;;;12489:5;:15;;;12464:9;:41::i;:::-;12441:20;;;:64;12104:590;;;12541:9;12536:148;12560:15;;;:22;12556:26;;12536:148;;;12631:7;:19;;:38;12651:3;:14;;12666:1;12651:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12651:17:19;12631:38;;;;;;;;;;;;;12607:20;;;:62;;;;;;;12651:17;12584:3;12536:148;;;;12104:590;-1:-1:-1;;;11394:1329:19;;;:::o;8495:186::-;545:1:22;528:18;;;;;;;;8560:4:19;;8576:36;8594:10;8606:5;8576:17;:36::i;:::-;8622:31;8642:10;8622:19;:31::i;:::-;8670:4;8663:11;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;7191:206:19;545:1:22;528:18;;;;;;;;7243:4:19;;7273:10;7293:24;7273:10;7293:19;:24::i;:::-;-1:-1:-1;;;;;7347:13:19;;;;;;:8;:13;;;;;:21;;;7327:42;;7342:3;;7327:14;:42::i;:::-;7386:4;7379:11;;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;;7191:206:19;;:::o;1066:23:20:-;;;;:::o;1202:57:19:-;-1:-1:-1;;1202:57:19;:::o;6043:278::-;545:1:22;528:18;;;;;;;;6162:4:19;;6182:36;6200:10;6212:5;6182:17;:36::i;:::-;6228:24;6241:10;6228:12;:24::i;:::-;6262:31;6282:10;6262:19;:31::i;:::-;6310:4;6303:11;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;;6043:278:19;;;;;:::o;8739:104::-;8821:4;:11;-1:-1:-1;;8821:15:19;8739:104;:::o;16615:148::-;719:9:16;:7;:9::i;:::-;711:54;;;;-1:-1:-1;;;711:54:16;;;;;;;;;292:11:15;;-1:-1:-1;;;292:11:15;;;;:19;;307:4;292:19;271:117;;;;-1:-1:-1;;;271:117:15;;;;;;;;;16695:26:19;16713:7;16695:17;:26::i;:::-;16736:20;16748:7;16736:20;;;;;;;;;;;;;;;16615:148;:::o;16322:236::-;719:9:16;:7;:9::i;:::-;711:54;;;;-1:-1:-1;;;711:54:16;;;;;;;;;16421:28:19;16433:15;16421:11;:28::i;:::-;16413:87;;;;-1:-1:-1;;;16413:87:19;;;;;;;;;16510:41;16528:15;16545:5;16510:17;:41::i;:::-;16322:236;;:::o;1899:58:20:-;;;;;;;;;;;;;:::o;1512:844:19:-;1694:11;;-1:-1:-1;;;1694:11:19;;;;1693:12;1685:66;;;;-1:-1:-1;;;1685:66:19;;;;;;;;;1761:24;:22;:24::i;:::-;1795:6;:19;;-1:-1:-1;;;;;;1795:19:19;1804:10;1795:19;;;;1824:17;;1851:12;;;;:4;;:12;;;;;:::i;:::-;-1:-1:-1;1873:16:19;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;1899:8:19;:20;;;1192:4;1929:25;:64;2003:3;:24;;-1:-1:-1;;;;;;2003:24:19;-1:-1:-1;;;;;2003:24:19;;;;;;;;;;;2052:16;;;-1:-1:-1;;;2052:16:19;;;;:3;;;;;:14;;:16;;;;;;;;;;;;:3;:16;;;5:2:-1;;;;30:1;27;20:12;5:2;2052:16:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2052:16:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2052:16:19;;;;;;;;;2037:5;:32;;-1:-1:-1;;;;;2037:32:19;;;;-1:-1:-1;;;;;;2037:32:19;;;;;;;;;2139:38;;;-1:-1:-1;2139:38:19;;;2143:16;;;;;;;;2139:38;;2161:15;;;;;2139:38;2161:15;;;;;;2139:38;;;;2129:4;27:10:-1;;-1:-1;23:18;;45:23;;;2129:49:19;;;;;;;;23:18:-1;;2129:49:19;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2129:49:19;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;2233:11:19;;;-1:-1:-1;;2233:8:19;:11;;-1:-1:-1;;2233:11:19;:34;2317:3;;2323:25;;2233:11;2283:66;;;;;-1:-1:-1;;;;;2317:3:19;;;;2283:66;;;;;;;;;;1512:844;;;;:::o;12777:377::-;12860:25;;:::i;:::-;12897:34;12934:15;;;:8;:15;;;;;;;;12976:20;;12959:37;;13025:22;;;;13006:16;;;:41;;;;13092:32;;;;13079:46;;:12;:46::i;:::-;13058:18;;;:67;-1:-1:-1;12777:377:19;;;:::o;698:157:17:-;782:66;698:157;:::o;1233:30:20:-;;;-1:-1:-1;;;;;1233:30:20;;:::o;8114:329:19:-;545:1:22;528:18;;;;;;;;8307:42:19;;;;;;;;;;;;;;;;;;8274:13;;528:18:22;8307:42:19;;;8325:10;;;;;;8307:42;;;;8325:10;;8307:42;8325:10;8307:42;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;;8307:42:19;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8337:11:19;;-1:-1:-1;8337:11:19;;;;8307:42;;;8337:11;;8307:42;8337:11;8307:42;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;8307:17:19;;-1:-1:-1;;;8307:42:19:i;:::-;8299:50;;8363:11;8359:78;;;8390:36;8408:10;8420:5;8390:17;:36::i;:::-;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;;8114:329:19;;;;;;;;:::o;1816:43:20:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1661:73::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;11000:336:19:-;11049:18;;:::i;:::-;11079:26;11137:38;11150:24;;11137:12;:38::i;:::-;11204:125;;;;;;;;;11247:11;;11204:125;;11115:60;;11204:125;;;;;-1:-1:-1;11000:336:19;:::o;2480:113::-;-1:-1:-1;;;;;2563:15:19;2537:7;2563:15;;;:8;:15;;;;;:23;;;;2480:113::o;1300:137:16:-;719:9;:7;:9::i;:::-;711:54;;;;-1:-1:-1;;;711:54:16;;;;;;;;;1398:1;1382:6;;1361:40;;-1:-1:-1;;;;;1382:6:16;;;;1361:40;;1398:1;;1361:40;1428:1;1411:19;;-1:-1:-1;;;;;;1411:19:16;;;1300:137::o;1435:39:20:-;;;;:::o;10536:213:19:-;-1:-1:-1;;;;;10681:15:19;;10625:14;10681:15;;;:8;:15;;;;;10713:29;10681:15;10713:20;:29::i;:::-;10706:36;10536:213;-1:-1:-1;;;10536:213:19:o;4847:283::-;545:1:22;528:18;;;;;;;;4953:4:19;;4973:24;4993:3;4973:19;:24::i;:::-;-1:-1:-1;;;;;5046:13:19;;;;;;:8;:13;;;;;:21;;;5007:61;;5024:10;;5036:3;;5041;;5007:16;:61::i;:::-;5078:24;5098:3;5078:19;:24::i;515:77:16:-;553:7;579:6;-1:-1:-1;;;;;579:6:16;515:77;:::o;866:90::-;906:4;943:6;-1:-1:-1;;;;;943:6:16;929:10;:20;;866:90::o;972:20:20:-;;;;;;;;;;;;;;;-1:-1:-1;;972:20:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5807:174:19;545:1:22;528:18;;;;;;;;5872:4:19;;5888:24;5901:10;5888:12;:24::i;4524:265::-;545:1:22;528:18;;;;;;;;4589:4:19;;4619:10;4639:24;4619:10;4639:19;:24::i;:::-;-1:-1:-1;;;;;4705:13:19;;;;;;:8;:13;;;;;:21;;;4673:54;;4690:3;;;;4700;;4673:16;:54::i;:::-;4737:24;4757:3;4737:19;:24::i;4179:291::-;545:1:22;528:18;;;;;;;;4281:4:19;;4315:10;4335:24;4315:10;4335:19;:24::i;:::-;4369:39;4386:3;4391;4396;4401:6;4369:16;:39::i;:::-;4418:24;4438:3;4418:19;:24::i;:::-;4459:4;4452:11;;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;656:21:20;;;-1:-1:-1;;;;;656:21:20;;:::o;6393:390:19:-;545:1:22;528:18;;;;;;;;6592:42:19;;;;;;;;;;;;;;;;;;6560:4;;528:18:22;6560:4:19;;6592:42;;;;6610:10;;;;;;6592:42;;;6610:10;;6592:42;6610:10;6592:42;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;;6592:42:19;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6622:11:19;;-1:-1:-1;6622:11:19;;;;6592:42;;;6622:11;;6592:42;6622:11;6592:42;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;6592:17:19;;-1:-1:-1;;;6592:42:19:i;:::-;6576:58;;6644:36;6662:10;6674:5;6644:17;:36::i;:::-;6690:24;6703:10;6690:12;:24::i;:::-;6724:31;6744:10;6724:19;:31::i;:::-;6772:4;6765:11;;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;784:28:20;;;;:::o;1550:40::-;;;;:::o;429:199:28:-;518:103;536:18;518:103;;;;;;;;;;;;;-1:-1:-1;;;518:103:28;;;;;;;;;;;;;;;;-1:-1:-1;;;518:103:28;;;618:2;518:17;:103::i;:::-;429:199;:::o;10803:137:19:-;545:1:22;528:18;;;;;;;;10870:4:19;;10886:26;10906:5;10886:19;:26::i;7457:276::-;545:1:22;528:18;;;;;;;;7579:4:19;;7613:10;7633:24;7613:10;7633:19;:24::i;:::-;7667:38;7682:8;7692:12;7667:14;:38::i;13690:2387::-;545:1:22;528:18;;;;;;;;719:9:16;:7;:9::i;:::-;711:54;;;;-1:-1:-1;;;711:54:16;;;;;;;;;13978:5:19;;13935:31;;;-1:-1:-1;;;13935:31:19;;;;13884:19;;-1:-1:-1;;;;;13978:5:19;;;;13935:29;;;;;;:31;;;;;;;;;;;;;;;:29;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;13935:31:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13935:31:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13935:31:19;;;;;;;;;-1:-1:-1;;;;;13935:49:19;;13914:146;;;;-1:-1:-1;;;13914:146:19;;;;;;;;;14099:3;;;-1:-1:-1;;;;;14112:24:19;;;-1:-1:-1;;;;;;14112:24:19;;;;;;14227:18;;;-1:-1:-1;;;14227:18:19;;;;14099:3;;;;;14070:26;;14099:3;;14227:16;;:18;;;;;;;;;;14070:26;14099:3;14227:18;;;5:2:-1;;;;30:1;27;20:12;5:2;14227:18:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14227:18:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14227:18:19;;;;;;;;;-1:-1:-1;14277:5:19;;:30;;-1:-1:-1;;;14277:30:19;;14197:48;;-1:-1:-1;14255:19:19;;-1:-1:-1;;;;;14277:5:19;;;;:15;;:30;;14301:4;;14277:30;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14277:30:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14277:30:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14277:30:19;;;;;;;;;14376:5;;14398:3;;14376:40;;-1:-1:-1;;;14376:40:19;;14255:52;;-1:-1:-1;;;;;;14376:5:19;;;;:13;;:40;;14398:3;;14255:52;;14376:40;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14376:40:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14376:40:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14376:40:19;;;;;;;;;14368:73;;;;-1:-1:-1;;;14368:73:19;;;;;;;;;14478:3;;:33;;-1:-1:-1;;;14478:33:19;;14451:24;;-1:-1:-1;;;;;14478:3:19;;:20;;:33;;14499:11;;14478:33;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14478:33:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14478:33:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14478:33:19;;;;;;;;;14964:3;;14451:60;;-1:-1:-1;;;;;;14956:31:19;;;14964:3;;14956:31;14952:122;;15019:6;-1:-1:-1;;;;;15003:42:19;;15054:7;:5;:7::i;:::-;15003:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15003:60:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15003:60:19;;;;14952:122;15626:23;15652:46;15673:24;;15652:20;:46::i;:::-;15747:25;;15626:72;;-1:-1:-1;15810:97:19;15890:16;15810:62;:15;15747:25;15810:62;:32;:62;:::i;:::-;:79;:97;:79;:97;:::i;:::-;15782:25;:125;15944:37;15965:15;15944:20;:37::i;:::-;15917:24;:64;16044:25;;15997:73;;;;;;16023:19;;16044:25;15997:73;;;;;;;;;;775:1:16;;;;;;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;13389:234:19;13543:24;;13469:15;;13587:29;13543:24;13587:12;:29::i;:::-;13577:39;;13389:234;;:::o;6925:214::-;545:1:22;528:18;;;;;;;;6994:4:19;;7024:10;7044:24;7024:10;7044:19;:24::i;:::-;7078:33;7093:3;7098:12;7078:14;:33::i;2871:169::-;-1:-1:-1;;;;;2999:25:19;;;2969:7;2999:25;;;:18;:25;;;;;;;;:34;;;;;;;;;;;;;2871:169::o;1377:51::-;1426:2;1377:51;:::o;1993:50:20:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1586:107:16:-;719:9;:7;:9::i;:::-;711:54;;;;-1:-1:-1;;;711:54:16;;;;;;;;;1658:28;1677:8;1658:18;:28::i;1299:19:20:-;;;-1:-1:-1;;;;;1299:19:20;;:::o;9971:254:19:-;-1:-1:-1;;;;;10116:15:19;;10060:14;10116:15;;;:8;:15;;;;;10171:23;;;;10060:14;;10158:37;;:12;:37::i;:::-;10141:54;9971:254;-1:-1:-1;;;;9971:254:19:o;32554:781::-;-1:-1:-1;;;;;32643:15:19;;;32617:23;32643:15;;;:8;:15;;;;;;;;32703:12;:19;;;;;32741:3;;:20;;-1:-1:-1;;;32741:20:19;;;;32643:15;;32703:19;;32741:3;;;:18;;:20;;;;;32643:15;;32741:20;;;;;;;;:3;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;32741:20:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32741:20:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;32741:20:19;;;;;;;;;32733:54;;;;-1:-1:-1;;;32733:54:19;;;;;;;;;32797:22;32822:29;32843:7;32822:20;:29::i;:::-;32797:54;-1:-1:-1;32866:18:19;;32862:467;;32927:41;;:78;;32990:14;32927:78;:62;:78;:::i;:::-;32900:105;;33039:17;;;;:37;;33061:14;33039:37;:21;:37;:::i;:::-;33019:17;;;:57;33108:15;;;;:35;;33128:14;33108:35;:19;:35;:::i;:::-;33090:15;;;:53;33171:11;;:31;;33187:14;33171:31;:15;:31;:::i;:::-;33157:11;:45;33221:35;;-1:-1:-1;;;;;33221:35:19;;;;;;;33241:14;;33221:35;;;;;;;;;;33296:5;-1:-1:-1;;;;;33275:43:19;33292:1;-1:-1:-1;;;;;33275:43:19;-1:-1:-1;;;;;;;;;;;33303:14:19;33275:43;;;;;;;;;;;;;;;32862:467;32554:781;;;;:::o;20586:733::-;20704:10;20669:23;20695:20;;;:8;:20;;;;;20733:16;20725:57;;;;-1:-1:-1;;;20725:57:19;;;;;;;;;20829:7;:15;;;20813:12;:31;;20792:106;;;;-1:-1:-1;;;20792:106:19;;;;;;;;;20909:49;20933:10;20945:12;20909:23;:49::i;:::-;21046:15;;;;:33;;21066:12;21046:33;:19;:33;:::i;:::-;21028:15;;;:51;21103:11;;:29;;21119:12;21103:29;:15;:29;:::i;:::-;21089:11;:43;21186:5;;:38;;-1:-1:-1;;;21186:38:19;;-1:-1:-1;;;;;21186:5:19;;;;:14;;:38;;21201:8;;21211:12;;21186:38;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21186:38:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21186:38:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;21186:38:19;;;;;;;;;21178:72;;;;-1:-1:-1;;;21178:72:19;;;;;;;;;21266:46;;21295:1;;21275:10;;-1:-1:-1;;;;;;;;;;;21266:46:19;;;21299:12;;21266:46;;;;;;;;;;20586:733;;;:::o;9475:436::-;9557:27;;9629:10;;;;;:34;;;-1:-1:-1;;9643:5:19;:20;;9629:34;9625:280;;;9679:14;;:::i;:::-;9696:4;9701:5;9696:11;;;;;;;;;;;;;;;;;;9679:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9679:28:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9734:3;:14;;;9721:27;;9776:3;:15;;;9762:29;;9625:280;;;;-1:-1:-1;;9835:16:19;;;9849:1;9835:16;;;;;;9879:15;;;;;;;;;9835:16;9625:280;9475:436;;;:::o;17212:1755::-;17369:3;-1:-1:-1;;;;;17362:10:19;:3;-1:-1:-1;;;;;17362:10:19;;;17354:47;;;;-1:-1:-1;;;17354:47:19;;;;;;;;;-1:-1:-1;;;;;17433:13:19;;;;;;:8;:13;;;;;:21;;;:31;-1:-1:-1;17433:31:19;17412:108;;;;-1:-1:-1;;;17412:108:19;;;;;;;;;17595:25;-1:-1:-1;;;;;17638:14:19;;;;;;;17634:159;;;-1:-1:-1;;;17634:159:19;;;-1:-1:-1;;;;;;17750:23:19;;;;;;;:18;:23;;;;;;;;:32;;;;;;;;;;17634:159;17844:6;17823:17;:27;;17802:107;;;;-1:-1:-1;;;17802:107:19;;;;;;;;;17985:20;18008:29;:17;18030:6;18008:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;18070:13:19;;18047:20;18070:13;;;:8;:13;;;;;:21;;;17985:52;;-1:-1:-1;18047:20:19;18070:33;;18096:6;18070:33;:25;:33;:::i;:::-;-1:-1:-1;;;;;18136:13:19;;18113:20;18136:13;;;:8;:13;;;;;:21;;;18047:56;;-1:-1:-1;18113:20:19;18136:33;;18162:6;18136:33;:25;:33;:::i;:::-;18113:56;;-1:-1:-1;;18239:17:19;:32;18235:110;;-1:-1:-1;;;;;18287:23:19;;;;;;;:18;:23;;;;;;;;:32;;;;;;;;;:47;;;18235:110;18390:26;18419:38;18445:3;18450:6;18419:25;:38::i;:::-;18390:67;;18467:48;18483:3;18488:6;18496:18;18467:15;:48::i;:::-;-1:-1:-1;;;;;18559:13:19;;;;;;;:8;:13;;;;;;:21;;;;:36;;;18605:13;;;;;;;;:21;;;:36;;;18695:13;:19;:24;;;;:64;;-1:-1:-1;;;;;;18735:13:19;;;;;;:8;:13;;;;;:19;:24;18695:64;:114;;;;-1:-1:-1;;;;;;18775:13:19;;;;;;:8;:13;;;;;:19;-1:-1:-1;;18775:34:19;;18695:114;18690:190;;;-1:-1:-1;;;;;18849:13:19;;;;;;:8;:13;;;;;:19;18826:43;;18844:3;;18826:17;:43::i;:::-;18948:3;-1:-1:-1;;;;;18934:26:19;18943:3;-1:-1:-1;;;;;18934:26:19;-1:-1:-1;;;;;;;;;;;18953:6:19;18934:26;;;;;;;;;;;;;;;17212:1755;;;;;;;;;:::o;23968:518::-;24070:7;24093:14;24110:37;24123:7;:23;;;24110:12;:37::i;:::-;24093:54;;24171:36;24189:7;:17;;;24171:7;:13;;;:17;;:36;;;;:::i;:::-;24161:6;:47;24157:323;;;24337:7;:17;;;24321:7;:13;;;24312:6;:22;:42;24305:49;;;;;24157:323;24468:1;24461:8;;;;;34616:135;34679:7;34706:1;34702;:5;34698:46;;;-1:-1:-1;34716:1:19;34709:8;;34698:46;-1:-1:-1;34739:5:19;;;34732:12;;23109:789;-1:-1:-1;;23193:5:19;:20;:43;;;-1:-1:-1;23225:4:19;:11;23217:19;;23193:43;23185:70;;;;-1:-1:-1;;;23185:70:19;;;;;;;;;-1:-1:-1;;;;;23291:15:19;;23265:23;23291:15;;;:8;:15;;;;;;;;23335:13;;23395:18;;;:8;:18;;;;;;23460:15;;;;;;;23489;;;;:19;23485:288;;23524:26;23553:49;23579:5;23586:7;:15;;;23553:25;:49::i;:::-;23616:21;;;23674:15;;;;23524:78;;-1:-1:-1;23651:59:19;;23667:5;;23524:78;23651:15;:59::i;:::-;23485:288;;;;23741:21;;;23485:288;23782:25;;-1:-1:-1;;23782:25:19;;;23817;;23806:1;23817:25;;;23857:34;;23885:5;;23875:8;;-1:-1:-1;;;;;23857:34:19;;;;;23782:20;;23857:34;23109:789;;;;;;:::o;19197:1069::-;19279:5;;:42;;-1:-1:-1;;;19279:42:19;;19325:10;;-1:-1:-1;;;;;19279:5:19;;:15;;:42;;19295:10;;19315:4;;19279:42;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19279:42:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19279:42:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19279:42:19;;;;;;;;;:56;;19258:123;;;;-1:-1:-1;;;19258:123:19;;;;;;;;;19427:10;19392:23;19418:20;;;:8;:20;;;;;;;19489:5;;:57;;-1:-1:-1;;;19489:57:19;;19418:20;;-1:-1:-1;;;;;19489:5:19;;;;:18;;:57;;19427:10;19528:4;;19535:10;;19489:57;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19489:57:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19489:57:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19489:57:19;;;;;;;;;19481:91;;;;-1:-1:-1;;;19481:91:19;;;;;;;;;19590:5;;19612:3;;19590:39;;-1:-1:-1;;;19590:39:19;;-1:-1:-1;;;;;19590:5:19;;;;:13;;:39;;19612:3;;;19618:10;;19590:39;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19590:39:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19590:39:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19590:39:19;;;;;;;;;19582:72;;;;-1:-1:-1;;;19582:72:19;;;;;;;;;19691:3;;:32;;-1:-1:-1;;;19691:32:19;;19664:24;;-1:-1:-1;;;;;19691:3:19;;:20;;:32;;19712:10;;19691:32;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19691:32:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19691:32:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19691:32:19;;;;;;;;;19796:11;;19664:59;;-1:-1:-1;19796:27:19;;19812:10;19796:27;:15;:27;:::i;:::-;19782:11;:41;19851:15;;;;:31;;19871:10;19851:31;:19;:31;:::i;:::-;19833:15;;;:49;19951:24;;:46;;19980:16;19951:46;:28;:46;:::i;:::-;19924:24;:73;20067:24;20094:38;20115:16;20094:20;:38::i;:::-;20067:65;;20142:57;20158:10;20170;20182:16;20142:15;:57::i;:::-;20215:44;;20236:10;;20232:1;;-1:-1:-1;;;;;;;;;;;20215:44:19;;;20248:10;;20215:44;;180:513:17;410:10;-1:-1:-1;;;;;400:35:17;;:37;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;400:37:17;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;400:37:17;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;400:37:17;;;;;;;;;296:66;267:170;246:231;;;;-1:-1:-1;;;246:231:17;;;;;;;;;569:66;545:132;496:191::o;34229:155:19:-;34336:17;34369:8;;;34229:155::o;411:66:15:-;452:11;:18;;-1:-1:-1;;;;452:18:15;-1:-1:-1;;;452:18:15;;;411:66::o;34823:605:19:-;34908:15;35319:102;35395:25;;35319:58;35352:3;;;;;;;;;-1:-1:-1;;;;;35352:3:19;-1:-1:-1;;;;;35352:22:19;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35352:24:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35352:24:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;35352:24:19;;;;;;;;;35319:15;;:58;:32;:58;:::i;21511:1465::-;21636:13;21661:9;21709:1;21689:10;:17;:21;21681:69;;;;-1:-1:-1;;;21681:69:19;;;;;;;;;1426:2;21768:10;:17;:43;;21760:106;;;;-1:-1:-1;;;21760:106:19;;;;;;;;;21918:11;:18;21897:10;:17;:39;21876:118;;;;-1:-1:-1;;;21876:118:19;;;;;;;;;-1:-1:-1;22153:24:19;;22191:400;22207:10;:17;22203:1;:21;22191:400;;;22287:1;22270:11;22282:1;22270:14;;;;;;;;;;;;;;:18;;;22245:124;;;;-1:-1:-1;;;22245:124:19;;;;;;;;;22416:1;-1:-1:-1;;;;;22391:27:19;:10;22402:1;22391:13;;;;;;;;;;;;;;-1:-1:-1;;;;;22391:27:19;;;22383:80;;;;-1:-1:-1;;;22383:80:19;;;;;;;;;22565:11;22577:1;22565:14;;;;;;;;;;;;;;22557:23;;22537:43;;;;22226:3;;;;;22191:400;;;22609:1;22605:5;;22600:276;22616:11;:18;22612:1;:22;22600:276;;;22835:16;1361:10;22787:24;;22769:11;22781:1;22769:14;;;;;;;;;;;;;;22761:23;;:50;22760:91;;;;;;22655:11;22667:1;22655:14;;;;;;;;;;;;;:210;;;;;;;;;;;22636:3;;;;;22600:276;;;22904:28;;;;;;;;;;;;;;;;;;;22894:4;27:10:-1;;22936:1:19;23:18:-1;;;45:23;;;-1:-1;22894:39:19;;;;;;;;22936:1;;23:18:-1;;22894:39:19;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22894:39:19;;;;;;;;;;;;;;;;:::i;:::-;;;;:43;22886:51;;22963:5;22952:17;;;;;;;;;;21511:1465;;;;;;:::o;35792:247::-;35874:23;35916:116;1119:4;35916:58;35949:3;;;;;;;;;-1:-1:-1;;;;;35949:3:19;-1:-1:-1;;;;;35949:22:19;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;36121:311:19;36211:23;36308:117;1119:4;36308:59;36341:25;;36308:15;:32;;:59;;;;:::i;2159:459:33:-;2217:7;2458:6;2454:45;;-1:-1:-1;2487:1:33;2480:8;;2454:45;2521:5;;;2525:1;2521;:5;:1;2544:5;;;;;:10;2536:56;;;;-1:-1:-1;;;2536:56:33;;;;;;;;3073:130;3131:7;3157:39;3161:1;3164;3157:39;;;;;;;;;;;;;;;;;:3;:39::i;36514:311:19:-;36792:25;;36604:23;;36701:117;;:73;:15;1119:4;36701:73;:32;:73;:::i;1794:259:16:-;-1:-1:-1;;;;;1880:22:16;;1859:107;;;;-1:-1:-1;;;1859:107:16;;;;;;;;;2002:6;;;1981:38;;-1:-1:-1;;;;;1981:38:16;;;;2002:6;;;1981:38;;;2029:6;:17;;-1:-1:-1;;;;;;2029:17:16;-1:-1:-1;;;;;2029:17:16;;;;;;;;;;1794:259::o;834:176:33:-;892:7;923:5;;;946:6;;;;938:46;;;;-1:-1:-1;;;938:46:33;;;;;;;;28480:461:19;28602:3;;:29;;-1:-1:-1;;;28602:29:19;;28576:23;;-1:-1:-1;;;;;28602:3:19;;:20;;:29;;28623:7;;28602:29;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28602:29:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28602:29:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;28602:29:19;;;;;;;;;28576:55;;28641:37;28662:15;28641:20;:37::i;:::-;;28688:30;28703:5;28710:7;28688:14;:30::i;:::-;28791:15;28764:24;;:42;28760:175;;;28822:24;:43;;;;;;;28760:175;;;28923:1;28896:24;:28;28760:175;28480:461;;;:::o;1274:134:33:-;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;27721:341:19:-;27917:3;;:20;;;-1:-1:-1;;;27917:20:19;;;;27814:26;;-1:-1:-1;;;;;27917:3:19;;:18;;:20;;;;;;;;;;;;;;27814:26;27917:3;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;27917:20:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27917:20:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27917:20:19;;;;;;;;;27909:54;;;;-1:-1:-1;;;27909:54:19;;;;;;;;;27994:21;28007:7;27994:12;:21::i;:::-;27973:42;;28025:30;28040:5;28047:7;28025:14;:30::i;25005:2289::-;-1:-1:-1;;;;;25162:15:19;;25136:23;25162:15;;;:8;:15;;;;;25210:13;;25162:15;;25136:23;25205:4;;-1:-1:-1;;25210:28:19;:72;;25269:13;;25210:72;;;25253:1;25210:72;25205:78;;;;;;;;;;;;;;;;;;;;25316:21;;25205:78;;-1:-1:-1;25316:25:19;25312:1976;;-1:-1:-1;25357:13:19;25373:7;25418:15;25447:1487;25463:15;;;:22;25459:26;;25447:1487;;;25510:32;25545:8;:27;25554:3;:14;;25569:1;25554:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25554:17:19;25545:27;;;;;;;;;;;;25554:17;25619:15;;:22;25545:27;;-1:-1:-1;;;25619:26:19;25613:33;;;;25752:117;;1361:10;25818:51;;25819:31;25831:3;:15;;25847:1;25831:18;;;;;;;;;;;;;;;;;;;;;25819:7;;25831:18;;;;;;;;;;;;;25819:11;:31;:::i;:::-;25818:51;;;;;;25752:117;;;25790:5;25752:117;25727:142;;25984:79;26048:14;25984:7;:19;;:38;26004:3;:14;;26019:1;26004:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26004:17:19;25984:38;;;;;;;;;;;;;;:79;:63;:79;:::i;:::-;25943:7;:19;;:38;25963:3;:14;;25978:1;25963:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25963:17:19;25943:38;;;;;;;;;;;;:120;26106:22;;;;:63;;26154:14;26106:63;:47;:63;:::i;:::-;26081:22;;;:88;26242:32;26252:5;26259:14;26242:9;:32::i;:::-;26234:40;;26360:32;26395:15;:133;;1361:10;26469:59;;26470:39;26490:3;:15;;26506:1;26490:18;;;;;;;26470:39;26469:59;;;;;;26395:133;;;26433:13;26395:133;26581:32;;;;26360:168;;-1:-1:-1;26581:83:19;;26360:168;26581:83;:57;:83;:::i;:::-;26546:32;;;:118;26745:50;26755:13;26770:24;26745:9;:50::i;:::-;26729:66;;26814:105;26831:5;26838:3;:14;;26853:1;26838:17;;;;;;;;;;;;;;;;;;26857:13;;-1:-1:-1;;;;;26838:17:19;;;;;26878:14;26894:24;26814:16;:105::i;:::-;25447:1487;;;;25487:3;;;;;25447:1487;;;25312:1976;;;;;27058:13;;;;:26;;27076:7;27058:26;:17;:26;:::i;:::-;27042:13;;;:42;27124:23;;;;:61;;27169:15;27124:61;:44;:61;:::i;:::-;27098:23;;;:87;27231:13;;27200:77;;27217:5;;;;27246:4;27252:7;27261:15;27200:16;:77::i;:::-;25005:2289;;;;;;:::o;3718:338:33:-;3804:7;3904:12;3897:5;3889:28;;;;-1:-1:-1;;;3889:28:33;;;;;;;;;;;3927:9;3943:1;3939;:5;;;;;;;3718:338;-1:-1:-1;;;;;3718:338:33:o;29126:3326:19:-;-1:-1:-1;;;;;29249:15:19;;29223:23;29249:15;;;:8;:15;;;;;29297:13;;29249:15;;29223:23;29292:4;;-1:-1:-1;;29297:28:19;:72;;29356:13;;29297:72;;;29340:1;29297:72;29292:78;;;;;;;;;;;;;;;;;;29274:96;;29489:21;29513:45;29523:7;:15;;;29540:7;:17;;;29513:9;:45::i;:::-;29489:69;;29644:7;29628:13;:23;29624:77;;;-1:-1:-1;29683:7:19;29624:77;29710:26;29739:27;29752:13;29739:12;:27::i;:::-;29780:21;;29710:56;;-1:-1:-1;29780:25:19;29776:2341;;29973:13;30016:18;29821:13;30048:1586;30064:15;;;:22;30060:26;;30048:1586;;;30111:32;30146:8;:27;30155:3;:14;;30170:1;30155:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30155:17:19;30146:27;;;;;;;;;;;;30155:17;30220:15;;:22;30146:27;;-1:-1:-1;;;30220:26:19;30214:33;;;;30360:123;;1361:10;30426:57;;30427:37;30445:3;:15;;30461:1;30445:18;;;;;;;;;;;;;;;;;;;;;30427:13;;30445:18;;;;;;;;;;;;;30427:17;:37;:::i;:::-;30426:57;;;;;;30360:123;;;30398:5;30360:123;30335:148;;30526:90;30557:16;:22;;;30601:14;30526:9;:90::i;:::-;30501:16;:22;;:115;;;;30675:106;30706:7;:19;;:38;30726:3;:14;;30741:1;30726:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30726:17:19;30706:38;;;;;;;;;;;;;30766:14;30675:9;:106::i;:::-;30634:7;:19;;:38;30654:3;:14;;30669:1;30654:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30654:17:19;30634:38;;;;;;;;;;;;:147;30853:32;30863:5;30870:14;30853:9;:32::i;:::-;30845:40;;30976:32;31011:15;:136;;1361:10;31085:62;;31086:42;31109:3;:15;;31125:1;31109:18;;;;;;;31086:42;31085:62;;;;;;31011:136;;;31049:13;31011:136;30976:171;;31200:110;31231:16;:32;;;31285:24;31200:9;:110::i;:::-;31165:32;;;:145;31392:50;31402:13;31417:24;31392:9;:50::i;:::-;31376:66;;31461:33;31477:16;31461:15;:33::i;:::-;31513:106;31530:5;31537:3;:14;;31552:1;31537:17;;;;;;;;;;;;;;;;;31556:13;;-1:-1:-1;;;;;31537:17:19;;;;31578:14;31594:24;31513:16;:106::i;:::-;30048:1586;;;;30088:3;;;;;30048:1586;;;29776:2341;;;;;;31800:39;31810:7;:13;;;31825;31800:9;:39::i;:::-;31784:13;;;:55;31921:23;;;;31911:54;;31946:18;31911:9;:54::i;:::-;31885:23;;;:80;31980:24;31885:7;31980:15;:24::i;:::-;32019:87;32036:5;32043;32050:7;:13;;;32065:5;32072:13;32087:18;32019:16;:87::i;:::-;32216:13;32206:7;:23;32202:244;;;32266:37;32289:13;32279:7;:23;32266:12;:37::i;:::-;32245:58;;32343:54;32353:7;:23;;;32378:18;32343:9;:54::i;:::-;32317:23;;;:80;32411:24;32317:7;32411:15;:24::i;1732:187:33:-;1818:7;1853:12;1845:6;;;;1837:29;;;;-1:-1:-1;;;1837:29:33;;;;;;;;;;-1:-1:-1;;;1888:5:33;;;1732:187::o;35500:220:19:-;35577:23;35619:94;35688:3;;;;;;;;;-1:-1:-1;;;;;35688:3:19;-1:-1:-1;;;;;35688:22:19;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35688:24:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35688:24:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;35688:24:19;;;;;;;;;35644:25;;35619:51;;:7;;:51;:24;:51;:::i;33341:882::-;33555:31;33589:8;:15;33598:5;33589:15;;;;;;;;;;;33555:49;;33655:5;33644:9;-1:-1:-1;;;;;33620:128:19;33637:5;-1:-1:-1;;;;;33620:128:19;;33674:14;33702:16;33732:15;33620:128;;;;;;;;;;;;;;;;;33763:14;33759:458;;;33815:19;;;;:41;;33839:16;33815:41;:23;:41;:::i;:::-;33793:19;;;:63;33902:29;;;;:67;;33953:15;33902:67;:50;:67;:::i;:::-;33870:29;;;:99;33759:458;;;34022:48;34032:8;:19;;;34053:16;34022:9;:48::i;:::-;34000:19;;;:70;34143:29;;;;34116:90;;34190:15;34116:9;:90::i;:::-;34084:29;;;:122;33759:458;33341:882;;;;;;;:::o;36940:253::-;37008:14;37025:37;37038:7;:23;;;37025:12;:37::i;:::-;37008:54;;37105:7;:13;;;37096:6;:22;37076:7;:17;;;:42;37072:115;;;37163:13;;;;37154:22;;37134:17;;;;:42;36940:253::o;398:233:28:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;398:233:28;;;-1:-1:-1;398:233:28;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;398:233:28;-1:-1:-1;;;;;398:233:28;;;;;;;;;;;-1:-1:-1;398:233:28;;;;;;;-1:-1:-1;398:233:28;;;-1:-1:-1;398:233:28;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;398:233:28;;;-1:-1:-1;398:233:28;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;398:233:28;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;398:233:28;;;;;;;5:130:-1;72:20;;97:33;72:20;97:33;;142:134;220:13;;238:33;220:13;238:33;;301:352;;;431:3;424:4;416:6;412:17;408:27;398:2;;449:1;446;439:12;398:2;-1:-1;469:20;;509:18;498:30;;495:2;;;541:1;538;531:12;495:2;575:4;567:6;563:17;551:29;;626:3;618:4;610:6;606:17;596:8;592:32;589:41;586:2;;;643:1;640;633:12;586:2;391:262;;;;;;1037:124;1101:20;;1126:30;1101:20;1126:30;;1168:128;1243:13;;1261:30;1243:13;1261:30;;1303:134;1381:13;;1399:33;1381:13;1399:33;;1444:186;1539:20;;1564:61;1539:20;1564:61;;1638:442;;1740:3;1733:4;1725:6;1721:17;1717:27;1707:2;;1758:1;1755;1748:12;1707:2;1795:6;1782:20;1817:65;1832:49;1874:6;1832:49;;;1817:65;;;1808:74;;1902:6;1895:5;1888:21;1938:4;1930:6;1926:17;1971:4;1964:5;1960:16;2006:3;1997:6;1992:3;1988:16;1985:25;1982:2;;;2023:1;2020;2013:12;1982:2;2033:41;2067:6;2062:3;2057;2033:41;;;1700:380;;;;;;;;2088:130;2155:20;;2180:33;2155:20;2180:33;;2366:241;;2470:2;2458:9;2449:7;2445:23;2441:32;2438:2;;;2486:1;2483;2476:12;2438:2;2521:1;2538:53;2583:7;2563:9;2538:53;;2614:263;;2729:2;2717:9;2708:7;2704:23;2700:32;2697:2;;;2745:1;2742;2735:12;2697:2;2780:1;2797:64;2853:7;2833:9;2797:64;;2884:366;;;3005:2;2993:9;2984:7;2980:23;2976:32;2973:2;;;3021:1;3018;3011:12;2973:2;3056:1;3073:53;3118:7;3098:9;3073:53;;;3063:63;;3035:97;3163:2;3181:53;3226:7;3217:6;3206:9;3202:22;3181:53;;;3171:63;;3142:98;2967:283;;;;;;3257:491;;;;3395:2;3383:9;3374:7;3370:23;3366:32;3363:2;;;3411:1;3408;3401:12;3363:2;3446:1;3463:53;3508:7;3488:9;3463:53;;;3453:63;;3425:97;3553:2;3571:53;3616:7;3607:6;3596:9;3592:22;3571:53;;;3561:63;;3532:98;3661:2;3679:53;3724:7;3715:6;3704:9;3700:22;3679:53;;;3669:63;;3640:98;3357:391;;;;;;3755:366;;;3876:2;3864:9;3855:7;3851:23;3847:32;3844:2;;;3892:1;3889;3882:12;3844:2;3927:1;3944:53;3989:7;3969:9;3944:53;;;3934:63;;3906:97;4034:2;4052:53;4097:7;4088:6;4077:9;4073:22;4052:53;;4128:795;;;;;;4332:2;4320:9;4311:7;4307:23;4303:32;4300:2;;;4348:1;4345;4338:12;4300:2;4383:31;;4434:18;4423:30;;4420:2;;;4466:1;4463;4456:12;4420:2;4494:80;4566:7;4557:6;4546:9;4542:22;4494:80;;;4484:90;;;;4362:218;4639:2;4628:9;4624:18;4611:32;4663:18;4655:6;4652:30;4649:2;;;4695:1;4692;4685:12;4649:2;4723:79;4794:7;4785:6;4774:9;4770:22;4723:79;;;4713:89;;;;4590:218;4839:2;4857:50;4899:7;4890:6;4879:9;4875:22;4857:50;;;4847:60;;4818:95;4294:629;;;;;;;;;4930:257;;5042:2;5030:9;5021:7;5017:23;5013:32;5010:2;;;5058:1;5055;5048:12;5010:2;5093:1;5110:61;5163:7;5143:9;5110:61;;5194:263;;5309:2;5297:9;5288:7;5284:23;5280:32;5277:2;;;5325:1;5322;5315:12;5277:2;5360:1;5377:64;5433:7;5413:9;5377:64;;5464:297;;5596:2;5584:9;5575:7;5571:23;5567:32;5564:2;;;5612:1;5609;5602:12;5564:2;5647:1;5664:81;5737:7;5717:9;5664:81;;5768:885;;;;;5971:3;5959:9;5950:7;5946:23;5942:33;5939:2;;;5988:1;5985;5978:12;5939:2;6023:1;6040:81;6113:7;6093:9;6040:81;;;6030:91;;6002:125;6186:2;6175:9;6171:18;6158:32;6210:18;6202:6;6199:30;6196:2;;;6242:1;6239;6232:12;6196:2;6262:63;6317:7;6308:6;6297:9;6293:22;6262:63;;;6252:73;;6137:194;6390:2;6379:9;6375:18;6362:32;6414:18;6406:6;6403:30;6400:2;;;6446:1;6443;6436:12;6400:2;6466:63;6521:7;6512:6;6501:9;6497:22;6466:63;;;6456:73;;6341:194;6566:2;6584:53;6629:7;6620:6;6609:9;6605:22;6584:53;;;6574:63;;6545:98;5933:720;;;;;;;;6660:241;;6764:2;6752:9;6743:7;6739:23;6735:32;6732:2;;;6780:1;6777;6770:12;6732:2;6815:1;6832:53;6877:7;6857:9;6832:53;;7178:801;;;;;;7385:2;7373:9;7364:7;7360:23;7356:32;7353:2;;;7401:1;7398;7391:12;7353:2;7436:1;7453:53;7498:7;7478:9;7453:53;;;7443:63;;7415:97;7571:2;7560:9;7556:18;7543:32;7595:18;7587:6;7584:30;7581:2;;;7627:1;7624;7617:12;7581:2;7655:80;7727:7;7718:6;7707:9;7703:22;7655:80;;;7645:90;;;;7522:219;7800:2;7789:9;7785:18;7772:32;7824:18;7816:6;7813:30;7810:2;;;7856:1;7853;7846:12;7810:2;7884:79;7955:7;7946:6;7935:9;7931:22;7884:79;;;7874:89;;;;7751:218;7347:632;;;;;;;;;7986:366;;;8107:2;8095:9;8086:7;8082:23;8078:32;8075:2;;;8123:1;8120;8113:12;8075:2;8158:1;8175:53;8220:7;8200:9;8175:53;;8359:399;;;8491:2;8479:9;8470:7;8466:23;8462:32;8459:2;;;8507:1;8504;8497:12;8459:2;8542:1;8559:64;8615:7;8595:9;8559:64;;;8549:74;;8521:108;8660:2;8678:64;8734:7;8725:6;8714:9;8710:22;8678:64;;8766:173;;8853:46;8895:3;8887:6;8853:46;;;-1:-1;;8928:4;8919:14;;8846:93;8948:169;;9033:44;9073:3;9065:6;9033:44;;9125:142;9216:45;9255:5;9216:45;;;9211:3;9204:58;9198:69;;;9274:103;9347:24;9365:5;9347:24;;9535:690;;9680:54;9728:5;9680:54;;;9747:86;9826:6;9821:3;9747:86;;;9740:93;;9854:56;9904:5;9854:56;;;9930:7;9958:1;9943:260;9968:6;9965:1;9962:13;9943:260;;;10035:6;10029:13;10056:63;10115:3;10100:13;10056:63;;;10049:70;;10136:60;10189:6;10136:60;;;10126:70;-1:-1;;9990:1;9983:9;9943:260;;;-1:-1;10216:3;;9659:566;-1:-1;;;;;9659:566;10262:682;;10405:53;10452:5;10405:53;;;10471:85;10549:6;10544:3;10471:85;;;10464:92;;10577:55;10626:5;10577:55;;;10652:7;10680:1;10665:257;10690:6;10687:1;10684:13;10665:257;;;10757:6;10751:13;10778:61;10835:3;10820:13;10778:61;;;10771:68;;10856:59;10908:6;10856:59;;;10846:69;-1:-1;;10712:1;10705:9;10665:257;;10952:104;11029:21;11044:5;11029:21;;11063:113;11146:24;11164:5;11146:24;;11183:182;11294:65;11353:5;11294:65;;11537:347;;11649:39;11682:5;11649:39;;;11700:71;11764:6;11759:3;11700:71;;;11693:78;;11776:52;11821:6;11816:3;11809:4;11802:5;11798:16;11776:52;;;11849:29;11871:6;11849:29;;;11840:39;;;;11629:255;-1:-1;;;11629:255;12238:364;;12398:67;12462:2;12457:3;12398:67;;;-1:-1;;;12478:87;;12593:2;12584:12;;12384:218;-1:-1;;12384:218;12611:465;;12771:67;12835:2;12830:3;12771:67;;;12871:66;12851:87;;-1:-1;;;12967:2;12958:12;;12951:88;13067:2;13058:12;;12757:319;-1:-1;;12757:319;13085:364;;13245:67;13309:2;13304:3;13245:67;;;-1:-1;;;13325:87;;13440:2;13431:12;;13231:218;-1:-1;;13231:218;13458:465;;13618:67;13682:2;13677:3;13618:67;;;13718:66;13698:87;;-1:-1;;;13814:2;13805:12;;13798:88;13914:2;13905:12;;13604:319;-1:-1;;13604:319;13932:364;;14092:67;14156:2;14151:3;14092:67;;;14192:66;14172:87;;14287:2;14278:12;;14078:218;-1:-1;;14078:218;14305:364;;14465:67;14529:2;14524:3;14465:67;;;-1:-1;;;14545:87;;14660:2;14651:12;;14451:218;-1:-1;;14451:218;14678:364;;14838:67;14902:2;14897:3;14838:67;;;14938:66;14918:87;;15033:2;15024:12;;14824:218;-1:-1;;14824:218;15051:465;;15211:67;15275:2;15270:3;15211:67;;;15311:66;15291:87;;-1:-1;;;15407:2;15398:12;;15391:88;15507:2;15498:12;;15197:319;-1:-1;;15197:319;15525:364;;15685:67;15749:2;15744:3;15685:67;;;-1:-1;;;15765:87;;15880:2;15871:12;;15671:218;-1:-1;;15671:218;15898:465;;16058:67;16122:2;16117:3;16058:67;;;16158:66;16138:87;;-1:-1;;;16254:2;16245:12;;16238:88;16354:2;16345:12;;16044:319;-1:-1;;16044:319;16372:465;;16532:67;16596:2;16591:3;16532:67;;;16632:66;16612:87;;-1:-1;;;16728:2;16719:12;;16712:88;16828:2;16819:12;;16518:319;-1:-1;;16518:319;16846:364;;17006:67;17070:2;17065:3;17006:67;;;17106:66;17086:87;;17201:2;17192:12;;16992:218;-1:-1;;16992:218;17219:364;;17379:67;17443:2;17438:3;17379:67;;;17479:66;17459:87;;17574:2;17565:12;;17365:218;-1:-1;;17365:218;17592:465;;17752:67;17816:2;17811:3;17752:67;;;17852:66;17832:87;;-1:-1;;;17948:2;17939:12;;17932:88;18048:2;18039:12;;17738:319;-1:-1;;17738:319;18066:364;;18226:67;18290:2;18285:3;18226:67;;;-1:-1;;;18306:87;;18421:2;18412:12;;18212:218;-1:-1;;18212:218;18439:465;;18599:67;18663:2;18658:3;18599:67;;;18699:66;18679:87;;-1:-1;;;18795:2;18786:12;;18779:88;18895:2;18886:12;;18585:319;-1:-1;;18585:319;18913:364;;19073:67;19137:2;19132:3;19073:67;;;19173:66;19153:87;;19268:2;19259:12;;19059:218;-1:-1;;19059:218;19286:364;;19446:67;19510:2;19505:3;19446:67;;;19546:66;19526:87;;19641:2;19632:12;;19432:218;-1:-1;;19432:218;19659:364;;19819:67;19883:2;19878:3;19819:67;;;19919:66;19899:87;;20014:2;20005:12;;19805:218;-1:-1;;19805:218;20032:364;;20192:67;20256:2;20251:3;20192:67;;;-1:-1;;;20272:87;;20387:2;20378:12;;20178:218;-1:-1;;20178:218;20405:465;;20565:67;20629:2;20624:3;20565:67;;;20665:66;20645:87;;-1:-1;;;20761:2;20752:12;;20745:88;20861:2;20852:12;;20551:319;-1:-1;;20551:319;20879:465;;21039:67;21103:2;21098:3;21039:67;;;21139:66;21119:87;;-1:-1;;;21235:2;21226:12;;21219:88;21335:2;21326:12;;21025:319;-1:-1;;21025:319;21353:465;;21513:67;21577:2;21572:3;21513:67;;;21613:66;21593:87;;-1:-1;;;21709:2;21700:12;;21693:88;21809:2;21800:12;;21499:319;-1:-1;;21499:319;21827:364;;21987:67;22051:2;22046:3;21987:67;;;22087:66;22067:87;;22182:2;22173:12;;21973:218;-1:-1;;21973:218;22200:465;;22360:67;22424:2;22419:3;22360:67;;;22460:66;22440:87;;-1:-1;;;22556:2;22547:12;;22540:88;22656:2;22647:12;;22346:319;-1:-1;;22346:319;22758:1474;22987:22;;22919:5;22910:15;;;23015:62;22914:3;22987:22;23015:62;;;22940:143;23159:4;23152:5;23148:16;23142:23;23171:63;23228:4;23223:3;23219:14;23205:12;23171:63;;;23093:147;23318:4;23311:5;23307:16;23301:23;23330:63;23387:4;23382:3;23378:14;23364:12;23330:63;;;23250:149;23473:4;23466:5;23462:16;23456:23;23485:63;23542:4;23537:3;23533:14;23519:12;23485:63;;;23409:145;23638:4;23631:5;23627:16;23621:23;23650:63;23707:4;23702:3;23698:14;23684:12;23650:63;;;23564:155;23804:4;23797:5;23793:16;23787:23;23816:63;23873:4;23868:3;23864:14;23850:12;23816:63;;;23729:156;23972:4;23965:5;23961:16;23955:23;23984:63;24041:4;24036:3;24032:14;24018:12;23984:63;;;23895:158;24136:4;24129:5;24125:16;24119:23;24148:63;24205:4;24200:3;24196:14;24182:12;24148:63;;24314:503;24538:22;;24465:4;24456:14;;;24566:62;24460:3;24538:22;24566:62;;;24485:149;24721:4;24714:5;24710:16;24704:23;24733:63;24790:4;24785:3;24781:14;24767:12;24733:63;;24901:656;25124:22;;25054:4;25045:14;;;25152:62;25049:3;25124:22;25152:62;;;25074:146;25299:4;25292:5;25288:16;25282:23;25311:63;25368:4;25363:3;25359:14;25345:12;25311:63;;;25230:150;25461:4;25454:5;25450:16;25444:23;25473:63;25530:4;25525:3;25521:14;25507:12;25473:63;;25794:100;25865:23;25882:5;25865:23;;26018:213;26136:2;26121:18;;26150:71;26125:9;26194:6;26150:71;;26238:340;26392:2;26377:18;;26406:79;26381:9;26458:6;26406:79;;;26496:72;26564:2;26553:9;26549:18;26540:6;26496:72;;26585:451;26767:2;26752:18;;26781:79;26756:9;26833:6;26781:79;;;26871:72;26939:2;26928:9;26924:18;26915:6;26871:72;;;26954;27022:2;27011:9;27007:18;26998:6;26954:72;;27043:324;27189:2;27174:18;;27203:71;27178:9;27247:6;27203:71;;;27285:72;27353:2;27342:9;27338:18;27329:6;27285:72;;27374:616;27618:2;27632:47;;;27603:18;;27693:108;27603:18;27787:6;27693:108;;;27685:116;;27849:9;27843:4;27839:20;27834:2;27823:9;27819:18;27812:48;27874:106;27975:4;27966:6;27874:106;;27997:201;28109:2;28094:18;;28123:65;28098:9;28161:6;28123:65;;28205:423;28373:2;28358:18;;28387:65;28362:9;28425:6;28387:65;;;28463:72;28531:2;28520:9;28516:18;28507:6;28463:72;;28635:213;28753:2;28738:18;;28767:71;28742:9;28811:6;28767:71;;28855:269;29001:2;28986:18;;29015:99;28990:9;29087:6;29015:99;;29383:293;29517:2;29531:47;;;29502:18;;29592:74;29502:18;29652:6;29592:74;;29991:407;30182:2;30196:47;;;30167:18;;30257:131;30167:18;30257:131;;30405:407;30596:2;30610:47;;;30581:18;;30671:131;30581:18;30671:131;;30819:407;31010:2;31024:47;;;30995:18;;31085:131;30995:18;31085:131;;31233:407;31424:2;31438:47;;;31409:18;;31499:131;31409:18;31499:131;;31647:407;31838:2;31852:47;;;31823:18;;31913:131;31823:18;31913:131;;32061:407;32252:2;32266:47;;;32237:18;;32327:131;32237:18;32327:131;;32475:407;32666:2;32680:47;;;32651:18;;32741:131;32651:18;32741:131;;32889:407;33080:2;33094:47;;;33065:18;;33155:131;33065:18;33155:131;;33303:407;33494:2;33508:47;;;33479:18;;33569:131;33479:18;33569:131;;33717:407;33908:2;33922:47;;;33893:18;;33983:131;33893:18;33983:131;;34131:407;34322:2;34336:47;;;34307:18;;34397:131;34307:18;34397:131;;34545:407;34736:2;34750:47;;;34721:18;;34811:131;34721:18;34811:131;;34959:407;35150:2;35164:47;;;35135:18;;35225:131;35135:18;35225:131;;35373:407;35564:2;35578:47;;;35549:18;;35639:131;35549:18;35639:131;;35787:407;35978:2;35992:47;;;35963:18;;36053:131;35963:18;36053:131;;36201:407;36392:2;36406:47;;;36377:18;;36467:131;36377:18;36467:131;;36615:407;36806:2;36820:47;;;36791:18;;36881:131;36791:18;36881:131;;37029:407;37220:2;37234:47;;;37205:18;;37295:131;37205:18;37295:131;;37443:407;37634:2;37648:47;;;37619:18;;37709:131;37619:18;37709:131;;37857:407;38048:2;38062:47;;;38033:18;;38123:131;38033:18;38123:131;;38271:407;38462:2;38476:47;;;38447:18;;38537:131;38447:18;38537:131;;38685:407;38876:2;38890:47;;;38861:18;;38951:131;38861:18;38951:131;;39099:407;39290:2;39304:47;;;39275:18;;39365:131;39275:18;39365:131;;39513:407;39704:2;39718:47;;;39689:18;;39779:131;39689:18;39779:131;;39927:407;40118:2;40132:47;;;40103:18;;40193:131;40103:18;40193:131;;40341:350;40527:3;40512:19;;40542:139;40516:9;40654:6;40542:139;;40698:329;40874:2;40859:18;;40888:129;40863:9;40990:6;40888:129;;41034:333;41212:2;41197:18;;41226:131;41201:9;41330:6;41226:131;;41594:727;41866:2;41851:18;;41880:71;41855:9;41924:6;41880:71;;;41999:9;41993:4;41989:20;41984:2;41973:9;41969:18;41962:48;42024:108;42127:4;42118:6;42024:108;;;42016:116;;42180:9;42174:4;42170:20;42165:2;42154:9;42150:18;42143:48;42205:106;42306:4;42297:6;42205:106;;;42197:114;41837:484;-1:-1;;;;;41837:484;42328:324;42474:2;42459:18;;42488:71;42463:9;42532:6;42488:71;;42659:435;42833:2;42818:18;;42847:71;42822:9;42891:6;42847:71;;43101:659;43331:3;43316:19;;43346:71;43320:9;43390:6;43346:71;;;43428:72;43496:2;43485:9;43481:18;43472:6;43428:72;;;43511;43579:2;43568:9;43564:18;43555:6;43511:72;;;43594;43662:2;43651:9;43647:18;43638:6;43594:72;;;43677:73;43745:3;43734:9;43730:19;43721:6;43677:73;;;43302:458;;;;;;;;;43767:209;43883:2;43868:18;;43897:69;43872:9;43939:6;43897:69;;43983:256;44045:2;44039:9;44071:17;;;44146:18;44131:34;;44167:22;;;44128:62;44125:2;;;44203:1;44200;44193:12;44125:2;44219;44212:22;44023:216;;-1:-1;44023:216;44246:322;;44390:18;44382:6;44379:30;44376:2;;;44422:1;44419;44412:12;44376:2;-1:-1;44553:4;44489;44466:17;;;;-1:-1;;44462:33;44543:15;;44313:255;44575:151;44699:4;44690:14;;44647:79;44890:137;44993:12;;44964:63;45661:178;45779:19;;;45828:4;45819:14;;45772:67;46205:91;;46267:24;46285:5;46267:24;;46303:85;46369:13;46362:21;;46345:43;46474:119;;46564:24;46582:5;46564:24;;46600:121;-1:-1;;;;;46662:54;;46645:76;46807:88;46879:10;46868:22;;46851:44;46902:129;;46989:37;47020:5;46989:37;;47900:145;47981:6;47976:3;47971;47958:30;-1:-1;48037:1;48019:16;;48012:27;47951:94;48054:268;48119:1;48126:101;48140:6;48137:1;48134:13;48126:101;;;48207:11;;;48201:18;48188:11;;;48181:39;48162:2;48155:10;48126:101;;;48242:6;48239:1;48236:13;48233:2;;;-1:-1;;48307:1;48289:16;;48282:27;48103:219;48330:97;48418:2;48398:14;-1:-1;;48394:28;;48378:49;48435:117;48504:24;48522:5;48504:24;;;48497:5;48494:35;48484:2;;48543:1;48540;48533:12;48559:111;48625:21;48640:5;48625:21;;48677:117;48746:24;48764:5;48746:24;;48801:173;48898:52;48944:5;48898:52;",
  "source": "/**\n * Because the use of ABIEncoderV2 , the pragma should be locked above 0.5.10 ,\n * as there is a known bug in array storage:\n * https://blog.ethereum.org/2019/06/25/solidity-storage-array-bugs/\n */\npragma solidity >=0.5.10 <0.6.0;\npragma experimental ABIEncoderV2;\n\nimport { RToken, IAllocationStrategy } from \"../RToken.sol\";\n\n/**\n * @notice RToken instantiation for rSAI (Redeemable SAI)\n */\ncontract rDAI is RToken {\n\n    function initialize (\n        IAllocationStrategy allocationStrategy) external {\n        RToken.initialize(allocationStrategy,\n            \"Redeemable DAI\",\n            \"rDAI\",\n            18);\n    }\n\n}\n",
  "sourcePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/tokens/rDAI.sol",
  "ast": {
    "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/tokens/rDAI.sol",
    "exportedSymbols": {
      "rDAI": [
        10430
      ]
    },
    "id": 10431,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 10408,
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".10",
          "<",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "202:32:28"
      },
      {
        "id": 10409,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "235:33:28"
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RToken.sol",
        "file": "../RToken.sol",
        "id": 10412,
        "nodeType": "ImportDirective",
        "scope": 10431,
        "sourceUnit": 9288,
        "src": "270:60:28",
        "symbolAliases": [
          {
            "foreign": 10410,
            "local": null
          },
          {
            "foreign": 10411,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 10413,
              "name": "RToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9287,
              "src": "415:6:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_RToken_$9287",
                "typeString": "contract RToken"
              }
            },
            "id": 10414,
            "nodeType": "InheritanceSpecifier",
            "src": "415:6:28"
          }
        ],
        "contractDependencies": [
          6390,
          6435,
          6461,
          6574,
          6605,
          9287,
          9344,
          9408,
          9434,
          11470
        ],
        "contractKind": "contract",
        "documentation": "@notice RToken instantiation for rSAI (Redeemable SAI)",
        "fullyImplemented": true,
        "id": 10430,
        "linearizedBaseContracts": [
          10430,
          9287,
          9434,
          6461,
          6605,
          6574,
          9344,
          6435,
          6390,
          11470,
          9408
        ],
        "name": "rDAI",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 10428,
              "nodeType": "Block",
              "src": "508:120:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 10422,
                        "name": "allocationStrategy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10416,
                        "src": "536:18:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "52656465656d61626c6520444149",
                        "id": 10423,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "568:16:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a1436027a31aac17147ee2333193725ac13933151099572a68f8ea62f93cd120",
                          "typeString": "literal_string \"Redeemable DAI\""
                        },
                        "value": "Redeemable DAI"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "72444149",
                        "id": 10424,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "598:6:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_09f0a07dca5370f1547f123214bd5ee760def56eae05f2c89ab132683b7e1ebd",
                          "typeString": "literal_string \"rDAI\""
                        },
                        "value": "rDAI"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "3138",
                        "id": 10425,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "618:2:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_18_by_1",
                          "typeString": "int_const 18"
                        },
                        "value": "18"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a1436027a31aac17147ee2333193725ac13933151099572a68f8ea62f93cd120",
                          "typeString": "literal_string \"Redeemable DAI\""
                        },
                        {
                          "typeIdentifier": "t_stringliteral_09f0a07dca5370f1547f123214bd5ee760def56eae05f2c89ab132683b7e1ebd",
                          "typeString": "literal_string \"rDAI\""
                        },
                        {
                          "typeIdentifier": "t_rational_18_by_1",
                          "typeString": "int_const 18"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 10419,
                        "name": "RToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9287,
                        "src": "518:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_RToken_$9287_$",
                          "typeString": "type(contract RToken)"
                        }
                      },
                      "id": 10421,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6789,
                      "src": "518:17:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IAllocationStrategy_$6133_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (contract IAllocationStrategy,string memory,string memory,uint256)"
                      }
                    },
                    "id": 10426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "518:103:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10427,
                  "nodeType": "ExpressionStatement",
                  "src": "518:103:28"
                }
              ]
            },
            "documentation": null,
            "id": 10429,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10417,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10416,
                  "name": "allocationStrategy",
                  "nodeType": "VariableDeclaration",
                  "scope": 10429,
                  "src": "459:38:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                    "typeString": "contract IAllocationStrategy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 10415,
                    "name": "IAllocationStrategy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6133,
                    "src": "459:19:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                      "typeString": "contract IAllocationStrategy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "449:49:28"
            },
            "returnParameters": {
              "id": 10418,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "508:0:28"
            },
            "scope": 10430,
            "src": "429:199:28",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 10431,
        "src": "398:233:28"
      }
    ],
    "src": "202:430:28"
  },
  "legacyAST": {
    "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/tokens/rDAI.sol",
    "exportedSymbols": {
      "rDAI": [
        10430
      ]
    },
    "id": 10431,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 10408,
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".10",
          "<",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "202:32:28"
      },
      {
        "id": 10409,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "235:33:28"
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RToken.sol",
        "file": "../RToken.sol",
        "id": 10412,
        "nodeType": "ImportDirective",
        "scope": 10431,
        "sourceUnit": 9288,
        "src": "270:60:28",
        "symbolAliases": [
          {
            "foreign": 10410,
            "local": null
          },
          {
            "foreign": 10411,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 10413,
              "name": "RToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9287,
              "src": "415:6:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_RToken_$9287",
                "typeString": "contract RToken"
              }
            },
            "id": 10414,
            "nodeType": "InheritanceSpecifier",
            "src": "415:6:28"
          }
        ],
        "contractDependencies": [
          6390,
          6435,
          6461,
          6574,
          6605,
          9287,
          9344,
          9408,
          9434,
          11470
        ],
        "contractKind": "contract",
        "documentation": "@notice RToken instantiation for rSAI (Redeemable SAI)",
        "fullyImplemented": true,
        "id": 10430,
        "linearizedBaseContracts": [
          10430,
          9287,
          9434,
          6461,
          6605,
          6574,
          9344,
          6435,
          6390,
          11470,
          9408
        ],
        "name": "rDAI",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 10428,
              "nodeType": "Block",
              "src": "508:120:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 10422,
                        "name": "allocationStrategy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10416,
                        "src": "536:18:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "52656465656d61626c6520444149",
                        "id": 10423,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "568:16:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a1436027a31aac17147ee2333193725ac13933151099572a68f8ea62f93cd120",
                          "typeString": "literal_string \"Redeemable DAI\""
                        },
                        "value": "Redeemable DAI"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "72444149",
                        "id": 10424,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "598:6:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_09f0a07dca5370f1547f123214bd5ee760def56eae05f2c89ab132683b7e1ebd",
                          "typeString": "literal_string \"rDAI\""
                        },
                        "value": "rDAI"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "3138",
                        "id": 10425,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "618:2:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_18_by_1",
                          "typeString": "int_const 18"
                        },
                        "value": "18"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a1436027a31aac17147ee2333193725ac13933151099572a68f8ea62f93cd120",
                          "typeString": "literal_string \"Redeemable DAI\""
                        },
                        {
                          "typeIdentifier": "t_stringliteral_09f0a07dca5370f1547f123214bd5ee760def56eae05f2c89ab132683b7e1ebd",
                          "typeString": "literal_string \"rDAI\""
                        },
                        {
                          "typeIdentifier": "t_rational_18_by_1",
                          "typeString": "int_const 18"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 10419,
                        "name": "RToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9287,
                        "src": "518:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_RToken_$9287_$",
                          "typeString": "type(contract RToken)"
                        }
                      },
                      "id": 10421,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6789,
                      "src": "518:17:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IAllocationStrategy_$6133_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (contract IAllocationStrategy,string memory,string memory,uint256)"
                      }
                    },
                    "id": 10426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "518:103:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10427,
                  "nodeType": "ExpressionStatement",
                  "src": "518:103:28"
                }
              ]
            },
            "documentation": null,
            "id": 10429,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10417,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10416,
                  "name": "allocationStrategy",
                  "nodeType": "VariableDeclaration",
                  "scope": 10429,
                  "src": "459:38:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                    "typeString": "contract IAllocationStrategy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 10415,
                    "name": "IAllocationStrategy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6133,
                    "src": "459:19:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                      "typeString": "contract IAllocationStrategy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "449:49:28"
            },
            "returnParameters": {
              "id": 10418,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "508:0:28"
            },
            "scope": 10430,
            "src": "429:199:28",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 10431,
        "src": "398:233:28"
      }
    ],
    "src": "202:430:28"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.12+commit.7709ece9.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.21",
  "updatedAt": "2020-04-22T17:31:54.564Z",
  "devdoc": {
    "methods": {
      "changeAllocationStrategy(address)": {
        "details": "IRToken.changeAllocationStrategy implementation"
      },
      "changeHat(uint256)": {
        "details": "IRToken.changeHat implementation"
      },
      "changeHatFor(address,uint256)": {
        "details": "IRToken.changeHatFor implementation"
      },
      "createHat(address[],uint32[],bool)": {
        "details": "IRToken.createHat implementation"
      },
      "getAccountStats(address)": {
        "details": "IRToken.getAccountStats implementation"
      },
      "getCurrentAllocationStrategy()": {
        "details": "IRToken.changeHatFor implementation"
      },
      "getCurrentSavingStrategy()": {
        "details": "IRToken.getCurrentSavingStrategy implementation"
      },
      "getGlobalStats()": {
        "details": "IRToken.getAccountStats implementation!1"
      },
      "getHatByAddress(address)": {
        "details": "IRToken.getHatByAddress implementation"
      },
      "getHatByID(uint256)": {
        "details": "IRToken.getHatByID implementation"
      },
      "getHatStats(uint256)": {
        "details": "IRToken.getHatStats implementation"
      },
      "getMaximumHatID()": {
        "details": "IRToken.getMaximumHatID implementation"
      },
      "getSavingAssetBalance()": {
        "details": "IRToken.getSavingAssetBalance implementation"
      },
      "interestPayableOf(address)": {
        "details": "IRToken.interestPayableOf implementation"
      },
      "isOwner()": {
        "details": "Returns true if the caller is the current owner."
      },
      "mint(uint256)": {
        "details": "IRToken.mint implementation"
      },
      "mintWithNewHat(uint256,address[],uint32[])": {
        "details": "IRToken.mintWithNewHat implementation"
      },
      "mintWithSelectedHat(uint256,uint256)": {
        "details": "IRToken.mintWithSelectedHat implementation"
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "payInterest(address)": {
        "details": "IRToken.payInterest implementation"
      },
      "receivedLoanOf(address)": {
        "details": "IRToken.receivedLoanOf implementation"
      },
      "receivedSavingsOf(address)": {
        "details": "IRToken.receivedSavingsOf implementation"
      },
      "redeem(uint256)": {
        "details": "IRToken.redeem implementation     It withdraws equal amount of initially supplied underlying assets"
      },
      "redeemAll()": {
        "details": "IRToken.redeemAll implementation"
      },
      "redeemAndTransfer(address,uint256)": {
        "details": "IRToken.redeemAndTransfer implementation"
      },
      "redeemAndTransferAll(address)": {
        "details": "IRToken.redeemAndTransferAll implementation"
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "transferAll(address)": {
        "details": "IRToken.transferAll implementation"
      },
      "transferAllFrom(address,address)": {
        "details": "IRToken.transferAllFrom implementation"
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      },
      "updateCode(address)": {
        "details": "Update the rToken logic contract code"
      }
    }
  },
  "userdoc": {
    "methods": {
      "allowance(address,address)": {
        "notice": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through `transferFrom`. This is zero by default.     * This value changes when `approve` or `transferFrom` are called."
      },
      "approve(address,uint256)": {
        "notice": "Sets `amount` as the allowance of `spender` over the caller's tokens.     * Returns a boolean value indicating whether the operation succeeded.     * > Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729     * Emits an `Approval` event."
      },
      "balanceOf(address)": {
        "notice": "Returns the amount of tokens owned by `account`."
      },
      "initialize(address,string,string,uint256)": {
        "notice": "Create rToken linked with cToken at `cToken_`"
      },
      "transfer(address,uint256)": {
        "notice": "Moves `amount` tokens from the caller's account to `dst`.     * Returns a boolean value indicating whether the operation succeeded.     * Emits a `Transfer` event. May also emit `InterestPaid` event."
      },
      "transferFrom(address,address,uint256)": {
        "notice": "Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance.     * Returns a boolean value indicating whether the operation succeeded.     * Emits a `Transfer` event."
      }
    },
    "notice": "RToken instantiation for rSAI (Redeemable SAI)"
  }
}