Duplicator – WordPress Migration Plugin - Version 1.3.34

Version Description

Download this release

Release Info

Developer cory@lamle.org
Plugin Icon 128x128 Duplicator – WordPress Migration Plugin
Version 1.3.34
Comparing to
See all releases

Code changes from version 1.3.32 to 1.3.34

Files changed (36) hide show
  1. assets/css/images/index.php +1 -1
  2. assets/css/index.php +1 -1
  3. assets/img/index.php +1 -1
  4. assets/js/handlebars.min.js +28 -28
  5. assets/js/index.php +1 -1
  6. assets/js/jquery.qtip/index.php +1 -1
  7. assets/js/jquery.qtip/jquery.qtip.min.js +4 -4
  8. assets/webfonts/index.php +1 -1
  9. classes/class.constants.php +6 -6
  10. classes/class.server.php +1 -1
  11. classes/host/class.godaddy.host.php +14 -14
  12. classes/host/class.wpengine.host.php +33 -33
  13. classes/index.php +1 -1
  14. classes/package/duparchive/index.php +1 -1
  15. classes/package/index.php +1 -1
  16. classes/ui/class.ui.screen.base.php +1 -1
  17. classes/ui/index.php +1 -1
  18. ctrls/index.php +1 -1
  19. define.php +2 -2
  20. duplicator.php +1 -1
  21. installer/dup-installer/assets/font-awesome/webfonts/index.php +1 -1
  22. installer/dup-installer/classes/Crypt/Base.php +2660 -2660
  23. installer/dup-installer/classes/Crypt/Random.php +340 -340
  24. installer/dup-installer/classes/Crypt/Rijndael.php +1050 -1050
  25. installer/dup-installer/classes/Crypt/index.php +1 -1
  26. installer/dup-installer/classes/class.csrf.php +177 -177
  27. installer/dup-installer/classes/class.package.php +99 -99
  28. installer/dup-installer/classes/config/class.boot.php +103 -103
  29. installer/dup-installer/classes/utilities/class.u.exceptions.php +86 -86
  30. installer/dup-installer/classes/utilities/class.u.search.reaplce.manager.php +610 -610
  31. installer/dup-installer/favicon/browserconfig.xml +9 -9
  32. installer/dup-installer/favicon/lite01_safari-pinned-tab.svg +42 -42
  33. installer/dup-installer/favicon/site.webmanifest +19 -19
  34. installer/dup-installer/views/view.exception.php +39 -39
  35. languages/duplicator-en_US.po +3856 -3856
  36. languages/duplicator.pot +2606 -3408
assets/css/images/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  //silent
1
+ <?php
2
  //silent
assets/css/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  //silent
1
+ <?php
2
  //silent
assets/img/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  //silent
1
+ <?php
2
  //silent
assets/js/handlebars.min.js CHANGED
@@ -1,29 +1,29 @@
1
- /**!
2
-
3
- @license
4
- handlebars v4.0.10
5
-
6
- Copyright (C) 2011-2016 by Yehuda Katz
7
-
8
- Permission is hereby granted, free of charge, to any person obtaining a copy
9
- of this software and associated documentation files (the "Software"), to deal
10
- in the Software without restriction, including without limitation the rights
11
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
- copies of the Software, and to permit persons to whom the Software is
13
- furnished to do so, subject to the following conditions:
14
-
15
- The above copyright notice and this permission notice shall be included in
16
- all copies or substantial portions of the Software.
17
-
18
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
- THE SOFTWARE.
25
-
26
- */
27
- !function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=r();return a.compile=function(b,c){return k.compile(b,c,a)},a.precompile=function(b,c){return k.precompile(b,c,a)},a.AST=i["default"],a.Compiler=k.Compiler,a.JavaScriptCompiler=m["default"],a.Parser=j.parser,a.parse=j.parse,a}var e=c(1)["default"];b.__esModule=!0;var f=c(2),g=e(f),h=c(35),i=e(h),j=c(36),k=c(41),l=c(42),m=e(l),n=c(39),o=e(n),p=c(34),q=e(p),r=g["default"].create,s=d();s.create=d,q["default"](s),s.Visitor=o["default"],s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(3)["default"],f=c(1)["default"];b.__esModule=!0;var g=c(4),h=e(g),i=c(21),j=f(i),k=c(6),l=f(k),m=c(5),n=e(m),o=c(22),p=e(o),q=c(34),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(1)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(5),g=c(6),h=e(g),i=c(10),j=c(18),k=c(20),l=e(k),m="4.0.10";b.VERSION=m;var n=7;b.COMPILER_REVISION=n;var o={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0"};b.REVISION_CHANGES=o;var p="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===p)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]}};var q=l["default"].log;b.log=q,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function e(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return m.test(a)?a.replace(l,c):a}function g(a){return!a&&0!==a||!(!p(a)||0!==a.length)}function h(a){var b=d({},a);return b._parent=a,b}function i(a,b){return a.path=b,a}function j(a,b){return(a?a+".":"")+b}b.__esModule=!0,b.extend=d,b.indexOf=e,b.escapeExpression=f,b.isEmpty=g,b.createFrame=h,b.blockParams=i,b.appendContextPath=j;var k={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;","=":"&#x3D;"},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0;c&&(g=c.start.line,h=c.start.column,a+=" - "+g+":"+h);for(var i=Error.prototype.constructor.call(this,a),j=0;j<f.length;j++)this[f[j]]=i[f[j]];Error.captureStackTrace&&Error.captureStackTrace(this,d);try{c&&(this.lineNumber=g,e?Object.defineProperty(this,"column",{value:h,enumerable:!0}):this.column=h)}catch(k){}}var e=c(7)["default"];b.__esModule=!0;var f=["description","fileName","lineNumber","message","name","number","stack"];d.prototype=new Error,b["default"]=d,a.exports=b["default"]},function(a,b,c){a.exports={"default":c(8),__esModule:!0}},function(a,b,c){var d=c(9);a.exports=function(a,b,c){return d.setDesc(a,b,c)}},function(a,b){var c=Object;a.exports={create:c.create,getProto:c.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:c.getOwnPropertyDescriptor,setDesc:c.defineProperty,setDescs:c.defineProperties,getKeys:c.keys,getNames:c.getOwnPropertyNames,getSymbols:c.getOwnPropertySymbols,each:[].forEach}},function(a,b,c){"use strict";function d(a){g["default"](a),i["default"](a),k["default"](a),m["default"](a),o["default"](a),q["default"](a),s["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultHelpers=d;var f=c(11),g=e(f),h=c(12),i=e(h),j=c(13),k=e(j),l=c(14),m=e(l),n=c(15),o=e(n),p=c(16),q=e(p),r=c(17),s=e(r)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("blockHelperMissing",function(b,c){var e=c.inverse,f=c.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(d.isArray(b))return b.length>0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(5),f=c(6),g=d(f);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,f){j&&(j.key=b,j.index=c,j.first=0===c,j.last=!!f,k&&(j.contextPath=k+b)),i+=d(a[b],{data:j,blockParams:e.blockParams([a[b],b],[k+b,null])})}if(!b)throw new g["default"]("Must pass iterator to #each");var d=b.fn,f=b.inverse,h=0,i="",j=void 0,k=void 0;if(b.data&&b.ids&&(k=e.appendContextPath(b.data.contextPath,b.ids[0])+"."),e.isFunction(a)&&(a=a.call(this)),b.data&&(j=e.createFrame(b.data)),a&&"object"==typeof a)if(e.isArray(a))for(var l=a.length;h<l;h++)h in a&&c(h,h,h===a.length-1);else{var m=void 0;for(var n in a)a.hasOwnProperty(n)&&(void 0!==m&&c(m,h-1),m=n,h++);void 0!==m&&c(m,h-1,!0)}return 0===h&&(i=f(this)),i})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(6),f=d(e);b["default"]=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new f["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("if",function(a,b){return d.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||d.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("lookup",function(a,b){return a&&a[b]})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("with",function(a,b){d.isFunction(a)&&(a=a.call(this));var c=b.fn;if(d.isEmpty(a))return b.inverse(this);var e=b.data;return b.data&&b.ids&&(e=d.createFrame(b.data),e.contextPath=d.appendContextPath(b.data.contextPath,b.ids[0])),c(a,{data:e,blockParams:d.blockParams([a],[e&&e.contextPath])})})},a.exports=b["default"]},function(a,b,c){"use strict";function d(a){g["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultDecorators=d;var f=c(19),g=e(f)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerDecorator("inline",function(a,b,c,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=c.partials;c.partials=d.extend({},g,b.partials);var h=a(e,f);return c.partials=g,h}),b.partials[e.args[0]]=e.fn,f})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5),e={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if("string"==typeof a){var b=d.indexOf(e.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f<c;f++)d[f-1]=arguments[f];console[b].apply(console,d)}}};b["default"]=e,a.exports=b["default"]},function(a,b){"use strict";function c(a){this.string=a}b.__esModule=!0,c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=s.COMPILER_REVISION;if(b!==c){if(b<c){var d=s.REVISION_CHANGES[c],e=s.REVISION_CHANGES[b];throw new r["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new r["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){function c(c,d,e){e.hash&&(d=p.extend({},d,e.hash),e.ids&&(e.ids[0]=!0)),c=b.VM.resolvePartial.call(this,c,d,e);var f=b.VM.invokePartial.call(this,c,d,e);if(null==f&&b.compile&&(e.partials[e.name]=b.compile(c,a.compilerOptions,b),f=e.partials[e.name](d,e)),null!=f){if(e.indent){for(var g=f.split("\n"),h=0,i=g.length;h<i&&(g[h]||h+1!==i);h++)g[h]=e.indent+g[h];f=g.join("\n")}return f}throw new r["default"]("The partial "+e.name+" could not be compiled when running in runtime-only mode")}function d(b){function c(b){return""+a.main(e,b,e.helpers,e.partials,g,i,h)}var f=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],g=f.data;d._setup(f),!f.partial&&a.useData&&(g=j(b,g));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=f.depths?b!=f.depths[0]?[b].concat(f.depths):f.depths:[b]),(c=k(a.main,c,e,f.depths||[],g,i))(b,f)}if(!b)throw new r["default"]("No environment passed to template");if(!a||!a.main)throw new r["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,b.VM.checkRevision(a.compiler);var e={strict:function(a,b){if(!(b in a))throw new r["default"]('"'+b+'" not defined in '+a);return a[b]},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:p.escapeExpression,invokePartial:c,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var g=this.programs[a],h=this.fn(a);return b||e||d||c?g=f(this,a,h,b,c,d,e):g||(g=this.programs[a]=f(this,a,h)),g},data:function(a,b){for(;a&&b--;)a=a._parent;return a},merge:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=p.extend({},b,a)),c},nullContext:l({}),noop:b.VM.noop,compilerInfo:a.compiler};return d.isTop=!0,d._setup=function(c){c.partial?(e.helpers=c.helpers,e.partials=c.partials,e.decorators=c.decorators):(e.helpers=e.merge(c.helpers,b.helpers),a.usePartial&&(e.partials=e.merge(c.partials,b.partials)),(a.usePartial||a.useDecorators)&&(e.decorators=e.merge(c.decorators,b.decorators)))},d._child=function(b,c,d,g){if(a.useBlockParams&&!d)throw new r["default"]("must pass block params");if(a.useDepths&&!g)throw new r["default"]("must pass parent depths");return f(e,b,a[b],c,0,d,g)},d}function f(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=k(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function g(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function h(a,b,c){var d=c.data&&c.data["partial-block"];c.partial=!0,c.ids&&(c.data.contextPath=c.ids[0]||c.data.contextPath);var e=void 0;if(c.fn&&c.fn!==i&&!function(){c.data=s.createFrame(c.data);var a=c.fn;e=c.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=s.createFrame(c.data),c.data["partial-block"]=d,a(b,c)},a.partials&&(c.partials=p.extend({},c.partials,a.partials))}(),void 0===a&&e&&(a=e),void 0===a)throw new r["default"]("The partial "+c.name+" could not be found");if(a instanceof Function)return a(b,c)}function i(){return""}function j(a,b){return b&&"root"in b||(b=b?s.createFrame(b):{},b.root=a),b}function k(a,b,c,d,e,f){if(a.decorator){var g={};b=a.decorator(b,g,c,d&&d[0],e,f,d),p.extend(b,g)}return b}var l=c(23)["default"],m=c(3)["default"],n=c(1)["default"];b.__esModule=!0,b.checkRevision=d,b.template=e,b.wrapProgram=f,b.resolvePartial=g,b.invokePartial=h,b.noop=i;var o=c(5),p=m(o),q=c(6),r=n(q),s=c(4)},function(a,b,c){a.exports={"default":c(24),__esModule:!0}},function(a,b,c){c(25),a.exports=c(30).Object.seal},function(a,b,c){var d=c(26);c(27)("seal",function(a){return function(b){return a&&d(b)?a(b):b}})},function(a,b){a.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},function(a,b,c){var d=c(28),e=c(30),f=c(33);a.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},function(a,b,c){var d=c(29),e=c(30),f=c(31),g="prototype",h=function(a,b,c){var i,j,k,l=a&h.F,m=a&h.G,n=a&h.S,o=a&h.P,p=a&h.B,q=a&h.W,r=m?e:e[b]||(e[b]={}),s=m?d:n?d[b]:(d[b]||{})[g];m&&(c=b);for(i in c)j=!l&&s&&i in s,j&&i in r||(k=j?s[i]:c[i],r[i]=m&&"function"!=typeof s[i]?c[i]:p&&j?f(k,d):q&&s[i]==k?function(a){var b=function(b){return this instanceof a?new a(b):a(b)};return b[g]=a[g],b}(k):o&&"function"==typeof k?f(Function.call,k):k,o&&((r[g]||(r[g]={}))[i]=k))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,a.exports=h},function(a,b){var c=a.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=c)},function(a,b){var c=a.exports={version:"1.2.6"};"number"==typeof __e&&(__e=c)},function(a,b,c){var d=c(32);a.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},function(a,b){a.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},function(a,b){a.exports=function(a){try{return!!a()}catch(b){return!0}}},function(a,b){(function(c){"use strict";b.__esModule=!0,b["default"]=function(a){var b="undefined"!=typeof c?c:window,d=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=d),a}},a.exports=b["default"]}).call(b,function(){return this}())},function(a,b){"use strict";b.__esModule=!0;var c={helpers:{helperExpression:function(a){return"SubExpression"===a.type||("MustacheStatement"===a.type||"BlockStatement"===a.type)&&!!(a.params&&a.params.length||a.hash)},scopedId:function(a){return/^\.|this\b/.test(a.original)},simpleId:function(a){return 1===a.parts.length&&!c.helpers.scopedId(a)&&!a.depth}}};b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if("Program"===a.type)return a;h["default"].yy=n,n.locInfo=function(a){return new n.SourceLocation(b&&b.srcName,a)};var c=new j["default"](b);return c.accept(h["default"].parse(a))}var e=c(1)["default"],f=c(3)["default"];b.__esModule=!0,b.parse=d;var g=c(37),h=e(g),i=c(38),j=e(i),k=c(40),l=f(k),m=c(5);b.parser=h["default"];var n={};m.extend(n,l)},function(a,b){"use strict";b.__esModule=!0;var c=function(){function a(){this.yy={}}var b={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,program_repetition0:6,statement:7,mustache:8,block:9,rawBlock:10,partial:11,partialBlock:12,content:13,COMMENT:14,CONTENT:15,openRawBlock:16,rawBlock_repetition_plus0:17,END_RAW_BLOCK:18,OPEN_RAW_BLOCK:19,helperName:20,openRawBlock_repetition0:21,openRawBlock_option0:22,CLOSE_RAW_BLOCK:23,openBlock:24,block_option0:25,closeBlock:26,openInverse:27,block_option1:28,OPEN_BLOCK:29,openBlock_repetition0:30,openBlock_option0:31,openBlock_option1:32,CLOSE:33,OPEN_INVERSE:34,openInverse_repetition0:35,openInverse_option0:36,openInverse_option1:37,openInverseChain:38,OPEN_INVERSE_CHAIN:39,openInverseChain_repetition0:40,openInverseChain_option0:41,openInverseChain_option1:42,inverseAndProgram:43,INVERSE:44,inverseChain:45,inverseChain_option0:46,OPEN_ENDBLOCK:47,OPEN:48,mustache_repetition0:49,mustache_option0:50,OPEN_UNESCAPED:51,mustache_repetition1:52,mustache_option1:53,CLOSE_UNESCAPED:54,OPEN_PARTIAL:55,partialName:56,partial_repetition0:57,partial_option0:58,openPartialBlock:59,OPEN_PARTIAL_BLOCK:60,openPartialBlock_repetition0:61,openPartialBlock_option0:62,param:63,sexpr:64,OPEN_SEXPR:65,sexpr_repetition0:66,sexpr_option0:67,CLOSE_SEXPR:68,hash:69,hash_repetition_plus0:70,hashSegment:71,ID:72,EQUALS:73,blockParams:74,OPEN_BLOCK_PARAMS:75,blockParams_repetition_plus0:76,CLOSE_BLOCK_PARAMS:77,path:78,dataName:79,STRING:80,NUMBER:81,BOOLEAN:82,UNDEFINED:83,NULL:84,DATA:85,pathSegments:86,SEP:87,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",14:"COMMENT",15:"CONTENT",18:"END_RAW_BLOCK",19:"OPEN_RAW_BLOCK",23:"CLOSE_RAW_BLOCK",29:"OPEN_BLOCK",33:"CLOSE",34:"OPEN_INVERSE",39:"OPEN_INVERSE_CHAIN",44:"INVERSE",47:"OPEN_ENDBLOCK",48:"OPEN",51:"OPEN_UNESCAPED",54:"CLOSE_UNESCAPED",55:"OPEN_PARTIAL",60:"OPEN_PARTIAL_BLOCK",65:"OPEN_SEXPR",68:"CLOSE_SEXPR",72:"ID",73:"EQUALS",75:"OPEN_BLOCK_PARAMS",77:"CLOSE_BLOCK_PARAMS",80:"STRING",81:"NUMBER",82:"BOOLEAN",83:"UNDEFINED",84:"NULL",85:"DATA",87:"SEP"},productions_:[0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[13,1],[10,3],[16,5],[9,4],[9,4],[24,6],[27,6],[38,6],[43,2],[45,3],[45,1],[26,3],[8,5],[8,5],[11,5],[12,3],[59,5],[63,1],[63,1],[64,5],[69,1],[71,3],[74,3],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[56,1],[56,1],[79,2],[78,1],[86,3],[86,1],[6,0],[6,2],[17,1],[17,2],[21,0],[21,2],[22,0],[22,1],[25,0],[25,1],[28,0],[28,1],[30,0],[30,2],[31,0],[31,1],[32,0],[32,1],[35,0],[35,2],[36,0],[36,1],[37,0],[37,1],[40,0],[40,2],[41,0],[41,1],[42,0],[42,1],[46,0],[46,1],[49,0],[49,2],[50,0],[50,1],[52,0],[52,2],[53,0],[53,1],[57,0],[57,2],[58,0],[58,1],[61,0],[61,2],[62,0],[62,1],[66,0],[66,2],[67,0],[67,1],[70,1],[70,2],[76,1],[76,2]],performAction:function(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return f[h-1];case 2:this.$=d.prepareProgram(f[h]);break;case 3:this.$=f[h];break;case 4:this.$=f[h];break;case 5:this.$=f[h];break;case 6:this.$=f[h];break;case 7:this.$=f[h];break;case 8:this.$=f[h];break;case 9:this.$={type:"CommentStatement",value:d.stripComment(f[h]),strip:d.stripFlags(f[h],f[h]),loc:d.locInfo(this._$)};break;case 10:this.$={type:"ContentStatement",original:f[h],value:f[h],loc:d.locInfo(this._$)};break;case 11:this.$=d.prepareRawBlock(f[h-2],f[h-1],f[h],this._$);break;case 12:this.$={path:f[h-3],params:f[h-2],hash:f[h-1]};break;case 13:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!1,this._$);break;case 14:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!0,this._$);break;case 15:this.$={open:f[h-5],path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 16:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 17:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 18:this.$={strip:d.stripFlags(f[h-1],f[h-1]),program:f[h]};break;case 19:var i=d.prepareBlock(f[h-2],f[h-1],f[h],f[h],!1,this._$),j=d.prepareProgram([i],f[h-1].loc);j.chained=!0,this.$={strip:f[h-2].strip,program:j,chain:!0};break;case 20:this.$=f[h];break;case 21:this.$={path:f[h-1],strip:d.stripFlags(f[h-2],f[h])};break;case 22:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 23:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 24:this.$={type:"PartialStatement",name:f[h-3],params:f[h-2],hash:f[h-1],indent:"",strip:d.stripFlags(f[h-4],f[h]),loc:d.locInfo(this._$)};break;case 25:this.$=d.preparePartialBlock(f[h-2],f[h-1],f[h],this._$);break;case 26:this.$={path:f[h-3],params:f[h-2],hash:f[h-1],strip:d.stripFlags(f[h-4],f[h])};break;case 27:this.$=f[h];break;case 28:this.$=f[h];break;case 29:this.$={type:"SubExpression",path:f[h-3],params:f[h-2],hash:f[h-1],loc:d.locInfo(this._$)};break;case 30:this.$={type:"Hash",pairs:f[h],loc:d.locInfo(this._$)};break;case 31:this.$={type:"HashPair",key:d.id(f[h-2]),value:f[h],loc:d.locInfo(this._$)};break;case 32:this.$=d.id(f[h-1]);break;case 33:this.$=f[h];break;case 34:this.$=f[h];break;case 35:this.$={type:"StringLiteral",value:f[h],original:f[h],loc:d.locInfo(this._$)};break;case 36:this.$={type:"NumberLiteral",value:Number(f[h]),original:Number(f[h]),loc:d.locInfo(this._$)};break;case 37:this.$={type:"BooleanLiteral",value:"true"===f[h],original:"true"===f[h],loc:d.locInfo(this._$)};break;case 38:this.$={type:"UndefinedLiteral",original:void 0,value:void 0,loc:d.locInfo(this._$)};break;case 39:this.$={type:"NullLiteral",original:null,value:null,loc:d.locInfo(this._$)};break;case 40:this.$=f[h];break;case 41:this.$=f[h];break;case 42:this.$=d.preparePath(!0,f[h],this._$);break;case 43:this.$=d.preparePath(!1,f[h],this._$);break;case 44:f[h-2].push({part:d.id(f[h]),original:f[h],separator:f[h-1]}),this.$=f[h-2];break;case 45:this.$=[{part:d.id(f[h]),original:f[h]}];break;case 46:this.$=[];break;case 47:f[h-1].push(f[h]);break;case 48:this.$=[f[h]];break;case 49:f[h-1].push(f[h]);break;case 50:this.$=[];break;case 51:f[h-1].push(f[h]);break;case 58:this.$=[];break;case 59:f[h-1].push(f[h]);break;case 64:this.$=[];break;case 65:f[h-1].push(f[h]);break;case 70:this.$=[];break;case 71:f[h-1].push(f[h]);break;case 78:this.$=[];break;case 79:f[h-1].push(f[h]);break;case 82:this.$=[];break;case 83:f[h-1].push(f[h]);break;case 86:this.$=[];break;case 87:f[h-1].push(f[h]);break;case 90:this.$=[];break;case 91:f[h-1].push(f[h]);break;case 94:this.$=[];break;case 95:f[h-1].push(f[h]);break;case 98:this.$=[f[h]];break;case 99:f[h-1].push(f[h]);break;case 100:this.$=[f[h]];break;case 101:f[h-1].push(f[h])}},table:[{3:1,4:2,5:[2,46],6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:11,14:[1,12],15:[1,20],16:17,19:[1,23],24:15,27:16,29:[1,21],34:[1,22],39:[2,2],44:[2,2],47:[2,2],48:[1,13],51:[1,14],55:[1,18],59:19,60:[1,24]},{1:[2,1]},{5:[2,47],14:[2,47],15:[2,47],19:[2,47],29:[2,47],34:[2,47],39:[2,47],44:[2,47],47:[2,47],48:[2,47],51:[2,47],55:[2,47],60:[2,47]},{5:[2,3],14:[2,3],15:[2,3],19:[2,3],29:[2,3],34:[2,3],39:[2,3],44:[2,3],47:[2,3],48:[2,3],51:[2,3],55:[2,3],60:[2,3]},{5:[2,4],14:[2,4],15:[2,4],19:[2,4],29:[2,4],34:[2,4],39:[2,4],44:[2,4],47:[2,4],48:[2,4],51:[2,4],55:[2,4],60:[2,4]},{5:[2,5],14:[2,5],15:[2,5],19:[2,5],29:[2,5],34:[2,5],39:[2,5],44:[2,5],47:[2,5],48:[2,5],51:[2,5],55:[2,5],60:[2,5]},{5:[2,6],14:[2,6],15:[2,6],19:[2,6],29:[2,6],34:[2,6],39:[2,6],44:[2,6],47:[2,6],48:[2,6],51:[2,6],55:[2,6],60:[2,6]},{5:[2,7],14:[2,7],15:[2,7],19:[2,7],29:[2,7],34:[2,7],39:[2,7],44:[2,7],47:[2,7],48:[2,7],51:[2,7],55:[2,7],60:[2,7]},{5:[2,8],14:[2,8],15:[2,8],19:[2,8],29:[2,8],34:[2,8],39:[2,8],44:[2,8],47:[2,8],48:[2,8],51:[2,8],55:[2,8],60:[2,8]},{5:[2,9],14:[2,9],15:[2,9],19:[2,9],29:[2,9],34:[2,9],39:[2,9],44:[2,9],47:[2,9],48:[2,9],51:[2,9],55:[2,9],60:[2,9]},{20:25,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:36,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:37,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{4:38,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{13:40,15:[1,20],17:39},{20:42,56:41,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:45,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{5:[2,10],14:[2,10],15:[2,10],18:[2,10],19:[2,10],29:[2,10],34:[2,10],39:[2,10],44:[2,10],47:[2,10],48:[2,10],51:[2,10],55:[2,10],60:[2,10]},{20:46,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:47,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:48,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:42,56:49,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[2,78],49:50,65:[2,78],72:[2,78],80:[2,78],81:[2,78],82:[2,78],83:[2,78],84:[2,78],85:[2,78]},{23:[2,33],33:[2,33],54:[2,33],65:[2,33],68:[2,33],72:[2,33],75:[2,33],80:[2,33],81:[2,33],82:[2,33],83:[2,33],84:[2,33],85:[2,33]},{23:[2,34],33:[2,34],54:[2,34],65:[2,34],68:[2,34],72:[2,34],75:[2,34],80:[2,34],81:[2,34],82:[2,34],83:[2,34],84:[2,34],85:[2,34]},{23:[2,35],33:[2,35],54:[2,35],65:[2,35],68:[2,35],72:[2,35],75:[2,35],80:[2,35],81:[2,35],82:[2,35],83:[2,35],84:[2,35],85:[2,35]},{23:[2,36],33:[2,36],54:[2,36],65:[2,36],68:[2,36],72:[2,36],75:[2,36],80:[2,36],81:[2,36],82:[2,36],83:[2,36],84:[2,36],85:[2,36]},{23:[2,37],33:[2,37],54:[2,37],65:[2,37],68:[2,37],72:[2,37],75:[2,37],80:[2,37],81:[2,37],82:[2,37],83:[2,37],84:[2,37],85:[2,37]},{23:[2,38],33:[2,38],54:[2,38],65:[2,38],68:[2,38],72:[2,38],75:[2,38],80:[2,38],81:[2,38],82:[2,38],83:[2,38],84:[2,38],85:[2,38]},{23:[2,39],33:[2,39],54:[2,39],65:[2,39],68:[2,39],72:[2,39],75:[2,39],80:[2,39],81:[2,39],82:[2,39],83:[2,39],84:[2,39],85:[2,39]},{23:[2,43],33:[2,43],54:[2,43],65:[2,43],68:[2,43],72:[2,43],75:[2,43],80:[2,43],81:[2,43],82:[2,43],83:[2,43],84:[2,43],85:[2,43],87:[1,51]},{72:[1,35],86:52},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{52:53,54:[2,82],65:[2,82],72:[2,82],80:[2,82],81:[2,82],82:[2,82],83:[2,82],84:[2,82],85:[2,82]},{25:54,38:56,39:[1,58],43:57,44:[1,59],45:55,47:[2,54]},{28:60,43:61,44:[1,59],47:[2,56]},{13:63,15:[1,20],18:[1,62]},{15:[2,48],18:[2,48]},{33:[2,86],57:64,65:[2,86],72:[2,86],80:[2,86],81:[2,86],82:[2,86],83:[2,86],84:[2,86],85:[2,86]},{33:[2,40],65:[2,40],72:[2,40],80:[2,40],81:[2,40],82:[2,40],83:[2,40],84:[2,40],85:[2,40]},{33:[2,41],65:[2,41],72:[2,41],80:[2,41],81:[2,41],82:[2,41],83:[2,41],84:[2,41],85:[2,41]},{20:65,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:66,47:[1,67]},{30:68,33:[2,58],65:[2,58],72:[2,58],75:[2,58],80:[2,58],81:[2,58],82:[2,58],83:[2,58],84:[2,58],85:[2,58]},{33:[2,64],35:69,65:[2,64],72:[2,64],75:[2,64],80:[2,64],81:[2,64],82:[2,64],83:[2,64],84:[2,64],85:[2,64]},{21:70,23:[2,50],65:[2,50],72:[2,50],80:[2,50],81:[2,50],82:[2,50],83:[2,50],84:[2,50],85:[2,50]},{33:[2,90],61:71,65:[2,90],72:[2,90],80:[2,90],81:[2,90],82:[2,90],83:[2,90],84:[2,90],85:[2,90]},{20:75,33:[2,80],50:72,63:73,64:76,65:[1,44],69:74,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{72:[1,80]},{23:[2,42],33:[2,42],54:[2,42],65:[2,42],68:[2,42],72:[2,42],75:[2,42],80:[2,42],81:[2,42],82:[2,42],83:[2,42],84:[2,42],85:[2,42],87:[1,51]},{20:75,53:81,54:[2,84],63:82,64:76,65:[1,44],69:83,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:84,47:[1,67]},{47:[2,55]},{4:85,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{47:[2,20]},{20:86,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:87,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{26:88,47:[1,67]},{47:[2,57]},{5:[2,11],14:[2,11],15:[2,11],19:[2,11],29:[2,11],34:[2,11],39:[2,11],44:[2,11],47:[2,11],48:[2,11],51:[2,11],55:[2,11],60:[2,11]},{15:[2,49],18:[2,49]},{20:75,33:[2,88],58:89,63:90,64:76,65:[1,44],69:91,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{65:[2,94],66:92,68:[2,94],72:[2,94],80:[2,94],81:[2,94],82:[2,94],83:[2,94],84:[2,94],85:[2,94]},{5:[2,25],14:[2,25],15:[2,25],19:[2,25],29:[2,25],34:[2,25],39:[2,25],44:[2,25],47:[2,25],48:[2,25],51:[2,25],55:[2,25],60:[2,25]},{20:93,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,31:94,33:[2,60],63:95,64:76,65:[1,44],69:96,70:77,71:78,72:[1,79],75:[2,60],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,66],36:97,63:98,64:76,65:[1,44],69:99,70:77,71:78,72:[1,79],75:[2,66],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,22:100,23:[2,52],63:101,64:76,65:[1,44],69:102,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,92],62:103,63:104,64:76,65:[1,44],69:105,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,106]},{33:[2,79],65:[2,79],72:[2,79],80:[2,79],81:[2,79],82:[2,79],83:[2,79],84:[2,79],85:[2,79]},{33:[2,81]},{23:[2,27],33:[2,27],54:[2,27],65:[2,27],68:[2,27],72:[2,27],75:[2,27],80:[2,27],81:[2,27],82:[2,27],83:[2,27],84:[2,27],85:[2,27]},{23:[2,28],33:[2,28],54:[2,28],65:[2,28],68:[2,28],72:[2,28],75:[2,28],80:[2,28],81:[2,28],82:[2,28],83:[2,28],84:[2,28],85:[2,28]},{23:[2,30],33:[2,30],54:[2,30],68:[2,30],71:107,72:[1,108],75:[2,30]},{23:[2,98],33:[2,98],54:[2,98],68:[2,98],72:[2,98],75:[2,98]},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],73:[1,109],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{23:[2,44],33:[2,44],54:[2,44],65:[2,44],68:[2,44],72:[2,44],75:[2,44],80:[2,44],81:[2,44],82:[2,44],83:[2,44],84:[2,44],85:[2,44],87:[2,44]},{54:[1,110]},{54:[2,83],65:[2,83],72:[2,83],80:[2,83],81:[2,83],82:[2,83],83:[2,83],84:[2,83],85:[2,83]},{54:[2,85]},{5:[2,13],14:[2,13],15:[2,13],19:[2,13],29:[2,13],34:[2,13],39:[2,13],44:[2,13],47:[2,13],48:[2,13],51:[2,13],55:[2,13],60:[2,13]},{38:56,39:[1,58],43:57,44:[1,59],45:112,46:111,47:[2,76]},{33:[2,70],40:113,65:[2,70],72:[2,70],75:[2,70],80:[2,70],81:[2,70],82:[2,70],83:[2,70],84:[2,70],85:[2,70]},{47:[2,18]},{5:[2,14],14:[2,14],15:[2,14],19:[2,14],29:[2,14],34:[2,14],39:[2,14],44:[2,14],47:[2,14],48:[2,14],51:[2,14],55:[2,14],60:[2,14]},{33:[1,114]},{33:[2,87],65:[2,87],72:[2,87],80:[2,87],81:[2,87],82:[2,87],83:[2,87],84:[2,87],
28
- 85:[2,87]},{33:[2,89]},{20:75,63:116,64:76,65:[1,44],67:115,68:[2,96],69:117,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,118]},{32:119,33:[2,62],74:120,75:[1,121]},{33:[2,59],65:[2,59],72:[2,59],75:[2,59],80:[2,59],81:[2,59],82:[2,59],83:[2,59],84:[2,59],85:[2,59]},{33:[2,61],75:[2,61]},{33:[2,68],37:122,74:123,75:[1,121]},{33:[2,65],65:[2,65],72:[2,65],75:[2,65],80:[2,65],81:[2,65],82:[2,65],83:[2,65],84:[2,65],85:[2,65]},{33:[2,67],75:[2,67]},{23:[1,124]},{23:[2,51],65:[2,51],72:[2,51],80:[2,51],81:[2,51],82:[2,51],83:[2,51],84:[2,51],85:[2,51]},{23:[2,53]},{33:[1,125]},{33:[2,91],65:[2,91],72:[2,91],80:[2,91],81:[2,91],82:[2,91],83:[2,91],84:[2,91],85:[2,91]},{33:[2,93]},{5:[2,22],14:[2,22],15:[2,22],19:[2,22],29:[2,22],34:[2,22],39:[2,22],44:[2,22],47:[2,22],48:[2,22],51:[2,22],55:[2,22],60:[2,22]},{23:[2,99],33:[2,99],54:[2,99],68:[2,99],72:[2,99],75:[2,99]},{73:[1,109]},{20:75,63:126,64:76,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,23],14:[2,23],15:[2,23],19:[2,23],29:[2,23],34:[2,23],39:[2,23],44:[2,23],47:[2,23],48:[2,23],51:[2,23],55:[2,23],60:[2,23]},{47:[2,19]},{47:[2,77]},{20:75,33:[2,72],41:127,63:128,64:76,65:[1,44],69:129,70:77,71:78,72:[1,79],75:[2,72],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,24],14:[2,24],15:[2,24],19:[2,24],29:[2,24],34:[2,24],39:[2,24],44:[2,24],47:[2,24],48:[2,24],51:[2,24],55:[2,24],60:[2,24]},{68:[1,130]},{65:[2,95],68:[2,95],72:[2,95],80:[2,95],81:[2,95],82:[2,95],83:[2,95],84:[2,95],85:[2,95]},{68:[2,97]},{5:[2,21],14:[2,21],15:[2,21],19:[2,21],29:[2,21],34:[2,21],39:[2,21],44:[2,21],47:[2,21],48:[2,21],51:[2,21],55:[2,21],60:[2,21]},{33:[1,131]},{33:[2,63]},{72:[1,133],76:132},{33:[1,134]},{33:[2,69]},{15:[2,12]},{14:[2,26],15:[2,26],19:[2,26],29:[2,26],34:[2,26],47:[2,26],48:[2,26],51:[2,26],55:[2,26],60:[2,26]},{23:[2,31],33:[2,31],54:[2,31],68:[2,31],72:[2,31],75:[2,31]},{33:[2,74],42:135,74:136,75:[1,121]},{33:[2,71],65:[2,71],72:[2,71],75:[2,71],80:[2,71],81:[2,71],82:[2,71],83:[2,71],84:[2,71],85:[2,71]},{33:[2,73],75:[2,73]},{23:[2,29],33:[2,29],54:[2,29],65:[2,29],68:[2,29],72:[2,29],75:[2,29],80:[2,29],81:[2,29],82:[2,29],83:[2,29],84:[2,29],85:[2,29]},{14:[2,15],15:[2,15],19:[2,15],29:[2,15],34:[2,15],39:[2,15],44:[2,15],47:[2,15],48:[2,15],51:[2,15],55:[2,15],60:[2,15]},{72:[1,138],77:[1,137]},{72:[2,100],77:[2,100]},{14:[2,16],15:[2,16],19:[2,16],29:[2,16],34:[2,16],44:[2,16],47:[2,16],48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,139]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],defaultActions:{4:[2,1],55:[2,55],57:[2,20],61:[2,57],74:[2,81],83:[2,85],87:[2,18],91:[2,89],102:[2,53],105:[2,93],111:[2,19],112:[2,77],117:[2,97],120:[2,63],123:[2,69],124:[2,12],136:[2,75],137:[2,32]},parseError:function(a,b){throw new Error(a)},parse:function(a){function b(){var a;return a=c.lexer.lex()||1,"number"!=typeof a&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var l=this.lexer.yylloc;f.push(l);var m=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var n,o,p,q,r,s,t,u,v,w={};;){if(p=d[d.length-1],this.defaultActions[p]?q=this.defaultActions[p]:(null!==n&&"undefined"!=typeof n||(n=b()),q=g[p]&&g[p][n]),"undefined"==typeof q||!q.length||!q[0]){var x="";if(!k){v=[];for(s in g[p])this.terminals_[s]&&s>2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;g<f.length&&(c=this._input.match(this.rules[f[g]]),!c||b&&!(c[0].length>b[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substr(a,b.yyleng-c)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(b.yytext=b.yytext.substr(5,b.yyleng-9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(b.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return b.yytext=e(1,2).replace(/\\"/g,'"'),80;case 32:return b.yytext=e(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return b.yytext=b.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=a}function e(a,b,c){void 0===b&&(b=a.length);var d=a[b-1],e=a[b-2];return d?"ContentStatement"===d.type?(e||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:c}function f(a,b,c){void 0===b&&(b=-1);var d=a[b+1],e=a[b+2];return d?"ContentStatement"===d.type?(e||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:c}function g(a,b,c){var d=a[null==b?0:b+1];if(d&&"ContentStatement"===d.type&&(c||!d.rightStripped)){var e=d.value;d.value=d.value.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.value!==e}}function h(a,b,c){var d=a[null==b?a.length-1:b-1];if(d&&"ContentStatement"===d.type&&(c||!d.leftStripped)){var e=d.value;return d.value=d.value.replace(c?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.value!==e,d.leftStripped}}var i=c(1)["default"];b.__esModule=!0;var j=c(39),k=i(j);d.prototype=new k["default"],d.prototype.Program=function(a){var b=!this.options.ignoreStandalone,c=!this.isRootSeen;this.isRootSeen=!0;for(var d=a.body,i=0,j=d.length;i<j;i++){var k=d[i],l=this.accept(k);if(l){var m=e(d,i,c),n=f(d,i,c),o=l.openStandalone&&m,p=l.closeStandalone&&n,q=l.inlineStandalone&&m&&n;l.close&&g(d,i,!0),l.open&&h(d,i,!0),b&&q&&(g(d,i),h(d,i)&&"PartialStatement"===k.type&&(k.indent=/([ \t]+$)/.exec(d[i-1].original)[1])),b&&o&&(g((k.program||k.inverse).body),h(d,i)),b&&p&&(g(d,i),h((k.inverse||k.program).body))}}return a},d.prototype.BlockStatement=d.prototype.DecoratorBlock=d.prototype.PartialBlockStatement=function(a){this.accept(a.program),this.accept(a.inverse);var b=a.program||a.inverse,c=a.program&&a.inverse,d=c,i=c;if(c&&c.chained)for(d=c.body[0].program;i.chained;)i=i.body[i.body.length-1].program;var j={open:a.openStrip.open,close:a.closeStrip.close,openStandalone:f(b.body),closeStandalone:e((d||b).body)};if(a.openStrip.close&&g(b.body,null,!0),c){var k=a.inverseStrip;k.open&&h(b.body,null,!0),k.close&&g(d.body,null,!0),a.closeStrip.open&&h(i.body,null,!0),!this.options.ignoreStandalone&&e(b.body)&&f(d.body)&&(h(b.body),g(d.body))}else a.closeStrip.open&&h(b.body,null,!0);return j},d.prototype.Decorator=d.prototype.MustacheStatement=function(a){return a.strip},d.prototype.PartialStatement=d.prototype.CommentStatement=function(a){var b=a.strip||{};return{inlineStandalone:!0,open:b.open,close:b.close}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(){this.parents=[]}function e(a){this.acceptRequired(a,"path"),this.acceptArray(a.params),this.acceptKey(a,"hash")}function f(a){e.call(this,a),this.acceptKey(a,"program"),this.acceptKey(a,"inverse")}function g(a){this.acceptRequired(a,"name"),this.acceptArray(a.params),this.acceptKey(a,"hash")}var h=c(1)["default"];b.__esModule=!0;var i=c(6),j=h(i);d.prototype={constructor:d,mutating:!1,acceptKey:function(a,b){var c=this.accept(a[b]);if(this.mutating){if(c&&!d.prototype[c.type])throw new j["default"]('Unexpected node type "'+c.type+'" found when accepting '+b+" on "+a.type);a[b]=c}},acceptRequired:function(a,b){if(this.acceptKey(a,b),!a[b])throw new j["default"](a.type+" requires "+b)},acceptArray:function(a){for(var b=0,c=a.length;b<c;b++)this.acceptKey(a,b),a[b]||(a.splice(b,1),b--,c--)},accept:function(a){if(a){if(!this[a.type])throw new j["default"]("Unknown type: "+a.type,a);this.current&&this.parents.unshift(this.current),this.current=a;var b=this[a.type](a);return this.current=this.parents.shift(),!this.mutating||b?b:b!==!1?a:void 0}},Program:function(a){this.acceptArray(a.body)},MustacheStatement:e,Decorator:e,BlockStatement:f,DecoratorBlock:f,PartialStatement:g,PartialBlockStatement:function(a){g.call(this,a),this.acceptKey(a,"program")},ContentStatement:function(){},CommentStatement:function(){},SubExpression:e,PathExpression:function(){},StringLiteral:function(){},NumberLiteral:function(){},BooleanLiteral:function(){},UndefinedLiteral:function(){},NullLiteral:function(){},Hash:function(a){this.acceptArray(a.pairs)},HashPair:function(a){this.acceptRequired(a,"value")}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if(b=b.path?b.path.original:b,a.path.original!==b){var c={loc:a.path.loc};throw new q["default"](a.path.original+" doesn't match "+b,c)}}function e(a,b){this.source=a,this.start={line:b.first_line,column:b.first_column},this.end={line:b.last_line,column:b.last_column}}function f(a){return/^\[.*\]$/.test(a)?a.substr(1,a.length-2):a}function g(a,b){return{open:"~"===a.charAt(2),close:"~"===b.charAt(b.length-3)}}function h(a){return a.replace(/^\{\{~?\!-?-?/,"").replace(/-?-?~?\}\}$/,"")}function i(a,b,c){c=this.locInfo(c);for(var d=a?"@":"",e=[],f=0,g="",h=0,i=b.length;h<i;h++){var j=b[h].part,k=b[h].original!==j;if(d+=(b[h].separator||"")+j,k||".."!==j&&"."!==j&&"this"!==j)e.push(j);else{if(e.length>0)throw new q["default"]("Invalid path: "+d,{loc:c});".."===j&&(f++,g+="../")}}return{type:"PathExpression",data:a,depth:f,parts:e,original:d,loc:c}}function j(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g,i=/\*/.test(d);return{type:i?"Decorator":"MustacheStatement",path:a,params:b,hash:c,escaped:h,strip:e,loc:this.locInfo(f)}}function k(a,b,c,e){d(a,c),e=this.locInfo(e);var f={type:"Program",body:b,strip:{},loc:e};return{type:"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:f,openStrip:{},inverseStrip:{},closeStrip:{},loc:e}}function l(a,b,c,e,f,g){e&&e.path&&d(a,e);var h=/\*/.test(a.open);b.blockParams=a.blockParams;var i=void 0,j=void 0;if(c){if(h)throw new q["default"]("Unexpected inverse block on decorator",c);c.chain&&(c.program.body[0].closeStrip=e.strip),j=c.strip,i=c.program}return f&&(f=i,i=b,b=f),{type:h?"DecoratorBlock":"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:b,inverse:i,openStrip:a.strip,inverseStrip:j,closeStrip:e&&e.strip,loc:this.locInfo(g)}}function m(a,b){if(!b&&a.length){var c=a[0].loc,d=a[a.length-1].loc;c&&d&&(b={source:c.source,start:{line:c.start.line,column:c.start.column},end:{line:d.end.line,column:d.end.column}})}return{type:"Program",body:a,strip:{},loc:b}}function n(a,b,c,e){return d(a,c),{type:"PartialBlockStatement",name:a.path,params:a.params,hash:a.hash,program:b,openStrip:a.strip,closeStrip:c&&c.strip,loc:this.locInfo(e)}}var o=c(1)["default"];b.__esModule=!0,b.SourceLocation=e,b.id=f,b.stripFlags=g,b.stripComment=h,b.preparePath=i,b.prepareMustache=j,b.prepareRawBlock=k,b.prepareBlock=l,b.prepareProgram=m,b.preparePartialBlock=n;var p=c(6),q=o(p)},function(a,b,c){"use strict";function d(){}function e(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function f(a,b,c){function d(){var d=c.parse(a,b),e=(new c.Compiler).compile(d,b),f=(new c.JavaScriptCompiler).compile(e,b,void 0,!0);return c.template(f)}function e(a,b){return f||(f=d()),f.call(this,a,b)}if(void 0===b&&(b={}),null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);b=l.extend({},b),"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var f=void 0;return e._setup=function(a){return f||(f=d()),f._setup(a)},e._child=function(a,b,c,e){return f||(f=d()),f._child(a,b,c,e)},e}function g(a,b){if(a===b)return!0;if(l.isArray(a)&&l.isArray(b)&&a.length===b.length){for(var c=0;c<a.length;c++)if(!g(a[c],b[c]))return!1;return!0}}function h(a){if(!a.path.parts){var b=a.path;a.path={type:"PathExpression",data:!1,depth:0,parts:[b.original+""],original:b.original+"",loc:b.loc}}}var i=c(1)["default"];b.__esModule=!0,b.Compiler=d,b.precompile=e,b.compile=f;var j=c(6),k=i(j),l=c(5),m=c(35),n=i(m),o=[].slice;d.prototype={compiler:d,equals:function(a){var b=this.opcodes.length;if(a.opcodes.length!==b)return!1;for(var c=0;c<b;c++){var d=this.opcodes[c],e=a.opcodes[c];if(d.opcode!==e.opcode||!g(d.args,e.args))return!1}b=this.children.length;for(var c=0;c<b;c++)if(!this.children[c].equals(a.children[c]))return!1;return!0},guid:0,compile:function(a,b){this.sourceNode=[],this.opcodes=[],this.children=[],this.options=b,this.stringParams=b.stringParams,this.trackIds=b.trackIds,b.blockParams=b.blockParams||[];var c=b.knownHelpers;if(b.knownHelpers={helperMissing:!0,blockHelperMissing:!0,each:!0,"if":!0,unless:!0,"with":!0,log:!0,lookup:!0},c)for(var d in c)d in c&&(this.options.knownHelpers[d]=c[d]);return this.accept(a)},compileProgram:function(a){var b=new this.compiler,c=b.compile(a,this.options),d=this.guid++;return this.usePartial=this.usePartial||c.usePartial,this.children[d]=c,this.useDepths=this.useDepths||c.useDepths,d},accept:function(a){if(!this[a.type])throw new k["default"]("Unknown type: "+a.type,a);this.sourceNode.unshift(a);var b=this[a.type](a);return this.sourceNode.shift(),b},Program:function(a){this.options.blockParams.unshift(a.blockParams);for(var b=a.body,c=b.length,d=0;d<c;d++)this.accept(b[d]);return this.options.blockParams.shift(),this.isSimple=1===c,this.blockParams=a.blockParams?a.blockParams.length:0,this},BlockStatement:function(a){h(a);var b=a.program,c=a.inverse;b=b&&this.compileProgram(b),c=c&&this.compileProgram(c);var d=this.classifySexpr(a);"helper"===d?this.helperSexpr(a,b,c):"simple"===d?(this.simpleSexpr(a),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("blockValue",a.path.original)):(this.ambiguousSexpr(a,b,c),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("ambiguousBlockValue")),this.opcode("append")},DecoratorBlock:function(a){var b=a.program&&this.compileProgram(a.program),c=this.setupFullMustacheParams(a,b,void 0),d=a.path;this.useDecorators=!0,this.opcode("registerDecorator",c.length,d.original)},PartialStatement:function(a){this.usePartial=!0;var b=a.program;b&&(b=this.compileProgram(a.program));var c=a.params;if(c.length>1)throw new k["default"]("Unsupported number of partial arguments: "+c.length,a);c.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):c.push({type:"PathExpression",parts:[],depth:0}));var d=a.name.original,e="SubExpression"===a.name.type;e&&this.accept(a.name),this.setupFullMustacheParams(a,b,void 0,!0);var f=a.indent||"";this.options.preventIndent&&f&&(this.opcode("appendContent",f),f=""),this.opcode("invokePartial",e,d,f),this.opcode("append")},PartialBlockStatement:function(a){this.PartialStatement(a)},MustacheStatement:function(a){this.SubExpression(a),a.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(a){this.DecoratorBlock(a)},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){h(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),d.strict=!0,this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.path;b.strict=!0,this.accept(b),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new k["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.strict=!0,e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,n["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=n["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts,a.strict)):this.opcode("lookupOnContext",a.parts,a.falsy,a.strict,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");c<d;c++)this.pushParam(b[c].value);for(;c--;)this.opcode("assignToHash",b[c].key);this.opcode("popHash")},opcode:function(a){this.opcodes.push({opcode:a,args:o.call(arguments,1),loc:this.sourceNode[0].loc})},addDepth:function(a){a&&(this.useDepths=!0)},classifySexpr:function(a){var b=n["default"].helpers.simpleId(a.path),c=b&&!!this.blockParamIndex(a.path.parts[0]),d=!c&&n["default"].helpers.helperExpression(a),e=!c&&(d||b);if(e&&!d){var f=a.path.parts[0],g=this.options;g.knownHelpers[f]?d=!0:g.knownHelpersOnly&&(e=!1)}return d?"helper":e?"ambiguous":"simple"},pushParams:function(a){for(var b=0,c=a.length;b<c;b++)this.pushParam(a[b])},pushParam:function(a){var b=null!=a.value?a.value:a.original||"";if(this.stringParams)b.replace&&(b=b.replace(/^(\.?\.\/)*/g,"").replace(/\//g,".")),a.depth&&this.addDepth(a.depth),this.opcode("getContext",a.depth||0),this.opcode("pushStringParam",b,a.type),"SubExpression"===a.type&&this.accept(a);else{if(this.trackIds){var c=void 0;if(!a.parts||n["default"].helpers.scopedId(a)||a.depth||(c=this.blockParamIndex(a.parts[0])),c){var d=a.parts.slice(1).join(".");this.opcode("pushId","BlockParam",c,d)}else b=a.original||b,b.replace&&(b=b.replace(/^this(?:\.|$)/,"").replace(/^\.\//,"").replace(/^\.$/,"")),this.opcode("pushId",a.type,b)}this.accept(a)}},setupFullMustacheParams:function(a,b,c,d){var e=a.params;return this.pushParams(e),this.opcode("pushProgram",b),this.opcode("pushProgram",c),a.hash?this.accept(a.hash):this.opcode("emptyHash",d),e},blockParamIndex:function(a){for(var b=0,c=this.options.blockParams.length;b<c;b++){var d=this.options.blockParams[b],e=d&&l.indexOf(d,a);if(d&&e>=0)return[b,e]}}}},function(a,b,c){"use strict";function d(a){this.value=a}function e(){}function f(a,b,c,d){var e=b.popStack(),f=0,g=c.length;for(a&&g--;f<g;f++)e=b.nameLookup(e,c[f],d);return a?[b.aliasable("container.strict"),"(",e,", ",b.quotedString(c[f]),")"]:e}var g=c(1)["default"];b.__esModule=!0;var h=c(4),i=c(6),j=g(i),k=c(5),l=c(43),m=g(l);e.prototype={nameLookup:function(a,b){return e.isValidJavaScriptVariableName(b)?[a,".",b]:[a,"[",JSON.stringify(b),"]"]},depthedLookup:function(a){return[this.aliasable("container.lookup"),'(depths, "',a,'")']},compilerInfo:function(){var a=h.COMPILER_REVISION,b=h.REVISION_CHANGES[a];return[a,b]},appendToBuffer:function(a,b,c){return k.isArray(a)||(a=[a]),a=this.source.wrap(a,b),this.environment.isSimple?["return ",a,";"]:c?["buffer += ",a,";"]:(a.appendToBuffer=!0,a)},initializeBuffer:function(){return this.quotedString("")},compile:function(a,b,c,d){this.environment=a,this.options=b,this.stringParams=this.options.stringParams,this.trackIds=this.options.trackIds,this.precompile=!d,this.name=this.environment.name,this.isChild=!!c,this.context=c||{decorators:[],programs:[],environments:[]},this.preamble(),this.stackSlot=0,this.stackVars=[],this.aliases={},this.registers={list:[]},this.hashes=[],this.compileStack=[],this.inlineStack=[],this.blockParams=[],this.compileChildren(a,b),this.useDepths=this.useDepths||a.useDepths||a.useDecorators||this.options.compat,this.useBlockParams=this.useBlockParams||a.useBlockParams;var e=a.opcodes,f=void 0,g=void 0,h=void 0,i=void 0;for(h=0,i=e.length;h<i;h++)f=e[h],this.source.currentLocation=f.loc,g=g||f.loc,this[f.opcode].apply(this,f.args);if(this.source.currentLocation=g,this.pushSource(""),this.stackSlot||this.inlineStack.length||this.compileStack.length)throw new j["default"]("Compile completed with content left on stack");this.decorators.isEmpty()?this.decorators=void 0:(this.useDecorators=!0,this.decorators.prepend("var decorators = container.decorators;\n"),this.decorators.push("return fn;"),d?this.decorators=Function.apply(this,["fn","props","container","depth0","data","blockParams","depths",this.decorators.merge()]):(this.decorators.prepend("function(fn, props, container, depth0, data, blockParams, depths) {\n"),this.decorators.push("}\n"),this.decorators=this.decorators.merge()));var k=this.createFunctionContext(d);if(this.isChild)return k;var l={compiler:this.compilerInfo(),main:k};this.decorators&&(l.main_d=this.decorators,l.useDecorators=!0);var m=this.context,n=m.programs,o=m.decorators;for(h=0,i=n.length;h<i;h++)n[h]&&(l[h]=n[h],o[h]&&(l[h+"_d"]=o[h],l.useDecorators=!0));return this.environment.usePartial&&(l.usePartial=!0),this.options.data&&(l.useData=!0),this.useDepths&&(l.useDepths=!0),this.useBlockParams&&(l.useBlockParams=!0),this.options.compat&&(l.compat=!0),d?l.compilerOptions=this.options:(l.compiler=JSON.stringify(l.compiler),this.source.currentLocation={start:{line:1,column:0}},l=this.objectLiteral(l),b.srcName?(l=l.toStringWithSourceMap({file:b.destName}),l.map=l.map&&l.map.toString()):l=l.toString()),l},preamble:function(){this.lastContext=0,this.source=new m["default"](this.options.srcName),this.decorators=new m["default"](this.options.srcName)},createFunctionContext:function(a){var b="",c=this.stackVars.concat(this.registers.list);c.length>0&&(b+=", "+c.join(", "));var d=0;for(var e in this.aliases){var f=this.aliases[e];this.aliases.hasOwnProperty(e)&&f.children&&f.referenceCount>1&&(b+=", alias"+ ++d+"="+e,f.children[0]="alias"+d)}var g=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&g.push("blockParams"),this.useDepths&&g.push("depths");var h=this.mergeSource(b);return a?(g.push(h),Function.apply(this,g)):this.source.wrap(["function(",g.join(","),") {\n ",h,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend(" + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},blockValue:function(a){var b=this.aliasable("helpers.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("helpers.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c,d){var e=0;d||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[e++])),this.resolvePath("context",a,e,b,c)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b,c){a?this.pushStackLiteral("container.data(data, "+a+")"):this.pushStackLiteral("data"),this.resolvePath("data",b,0,!0,c)},resolvePath:function(a,b,c,d,e){var g=this;if(this.options.strict||this.options.assumeObjects)return void this.push(f(this.options.strict&&e,this,b,a));for(var h=b.length;c<h;c++)this.replaceStack(function(e){
29
  var f=g.nameLookup(e,b[c],a);return d?[" && ",f]:[" != null ? ",f," : ",e]})},resolvePossibleLambda:function(){this.push([this.aliasable("container.lambda"),"(",this.popStack(),", ",this.contextName(0),")"])},pushStringParam:function(a,b){this.pushContext(),this.pushString(b),"SubExpression"!==b&&("string"==typeof a?this.pushString(a):this.pushStackLiteral(a))},emptyHash:function(a){this.trackIds&&this.push("{}"),this.stringParams&&(this.push("{}"),this.push("{}")),this.pushStackLiteral(a?"undefined":"{}")},pushHash:function(){this.hash&&this.hashes.push(this.hash),this.hash={values:[],types:[],contexts:[],ids:[]}},popHash:function(){var a=this.hash;this.hash=this.hashes.pop(),this.trackIds&&this.push(this.objectLiteral(a.ids)),this.stringParams&&(this.push(this.objectLiteral(a.contexts)),this.push(this.objectLiteral(a.types))),this.push(this.objectLiteral(a.values))},pushString:function(a){this.pushStackLiteral(this.quotedString(a))},pushLiteral:function(a){this.pushStackLiteral(a)},pushProgram:function(a){null!=a?this.pushStackLiteral(this.programExpression(a)):this.pushStackLiteral(null)},registerDecorator:function(a,b){var c=this.nameLookup("decorators",b,"decorator"),d=this.setupHelperArgs(b,a);this.decorators.push(["fn = ",this.decorators.functionCall(c,"",["fn","props","container",d])," || fn;"])},invokeHelper:function(a,b,c){var d=this.popStack(),e=this.setupHelper(a,b),f=c?[e.name," || "]:"",g=["("].concat(f,d);this.options.strict||g.push(" || ",this.aliasable("helpers.helperMissing")),g.push(")"),this.push(this.source.functionCall(g,"call",e.callParams))},invokeKnownHelper:function(a,b){var c=this.setupHelper(a,b);this.push(this.source.functionCall(c.name,"call",c.callParams))},invokeAmbiguous:function(a,b){this.useRegister("helper");var c=this.popStack();this.emptyHash();var d=this.setupHelper(0,a,b),e=this.lastHelper=this.nameLookup("helpers",a,"helper"),f=["(","(helper = ",e," || ",c,")"];this.options.strict||(f[0]="(helper = ",f.push(" != null ? helper : ",this.aliasable("helpers.helperMissing"))),this.push(["(",f,d.paramsInit?["),(",d.paramsInit]:[],"),","(typeof helper === ",this.aliasable('"function"')," ? ",this.source.functionCall("helper","call",d.callParams)," : helper))"])},invokePartial:function(a,b,c){var d=[],e=this.setupParams(b,1,d);a&&(b=this.popStack(),delete e.name),c&&(e.indent=JSON.stringify(c)),e.helpers="helpers",e.partials="partials",e.decorators="container.decorators",a?d.unshift(b):d.unshift(this.nameLookup("partials",b,"partial")),this.options.compat&&(e.depths="depths"),e=this.objectLiteral(e),d.push(e),this.push(this.source.functionCall("container.invokePartial","",d))},assignToHash:function(a){var b=this.popStack(),c=void 0,d=void 0,e=void 0;this.trackIds&&(e=this.popStack()),this.stringParams&&(d=this.popStack(),c=this.popStack());var f=this.hash;c&&(f.contexts[a]=c),d&&(f.types[a]=d),e&&(f.ids[a]=e),f.values[a]=b},pushId:function(a,b,c){"BlockParam"===a?this.pushStackLiteral("blockParams["+b[0]+"].path["+b[1]+"]"+(c?" + "+JSON.stringify("."+c):"")):"PathExpression"===a?this.pushString(b):"SubExpression"===a?this.pushStackLiteral("true"):this.pushStackLiteral("null")},compiler:e,compileChildren:function(a,b){for(var c=a.children,d=void 0,e=void 0,f=0,g=c.length;f<g;f++){d=c[f],e=new this.compiler;var h=this.matchExistingProgram(d);if(null==h){this.context.programs.push("");var i=this.context.programs.length;d.index=i,d.name="program"+i,this.context.programs[i]=e.compile(d,b,this.context,!this.precompile),this.context.decorators[i]=e.decorators,this.context.environments[i]=d,this.useDepths=this.useDepths||e.useDepths,this.useBlockParams=this.useBlockParams||e.useBlockParams,d.useDepths=this.useDepths,d.useBlockParams=this.useBlockParams}else d.index=h.index,d.name="program"+h.index,this.useDepths=this.useDepths||h.useDepths,this.useBlockParams=this.useBlockParams||h.useBlockParams}},matchExistingProgram:function(a){for(var b=0,c=this.context.environments.length;b<c;b++){var d=this.context.environments[b];if(d&&d.equals(a))return d}},programExpression:function(a){var b=this.environment.children[a],c=[b.index,"data",b.blockParams];return(this.useBlockParams||this.useDepths)&&c.push("blockParams"),this.useDepths&&c.push("depths"),"container.program("+c.join(", ")+")"},useRegister:function(a){this.registers[a]||(this.registers[a]=!0,this.registers.list.push(a))},push:function(a){return a instanceof d||(a=this.source.wrap(a)),this.inlineStack.push(a),a},pushStackLiteral:function(a){this.push(new d(a))},pushSource:function(a){this.pendingContent&&(this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent),this.pendingLocation)),this.pendingContent=void 0),a&&this.source.push(a)},replaceStack:function(a){var b=["("],c=void 0,e=void 0,f=void 0;if(!this.isInline())throw new j["default"]("replaceStack on non-inline");var g=this.popStack(!0);if(g instanceof d)c=[g.value],b=["(",c],f=!0;else{e=!0;var h=this.incrStack();b=["((",this.push(h)," = ",g,")"],c=this.topStack()}var i=a.call(this,c);f||this.popStack(),e&&this.stackSlot--,this.push(b.concat(i,")"))},incrStack:function(){return this.stackSlot++,this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;b<c;b++){var e=a[b];if(e instanceof d)this.compileStack.push(e);else{var f=this.incrStack();this.pushSource([f," = ",e,";"]),this.compileStack.push(f)}}},isInline:function(){return this.inlineStack.length},popStack:function(a){var b=this.isInline(),c=(b?this.inlineStack:this.compileStack).pop();if(!a&&c instanceof d)return c.value;if(!b){if(!this.stackSlot)throw new j["default"]("Invalid stack pop");this.stackSlot--}return c},topStack:function(){var a=this.isInline()?this.inlineStack:this.compileStack,b=a[a.length-1];return b instanceof d?b.value:b},contextName:function(a){return this.useDepths&&a?"depths["+a+"]":"depth"+a},quotedString:function(a){return this.source.quotedString(a)},objectLiteral:function(a){return this.source.objectLiteral(a)},aliasable:function(a){var b=this.aliases[a];return b?(b.referenceCount++,b):(b=this.aliases[a]=this.source.wrap(a),b.aliasable=!0,b.referenceCount=1,b)},setupHelper:function(a,b,c){var d=[],e=this.setupHelperArgs(b,a,d,c),f=this.nameLookup("helpers",b,"helper"),g=this.aliasable(this.contextName(0)+" != null ? "+this.contextName(0)+" : (container.nullContext || {})");return{params:d,paramsInit:e,name:f,callParams:[g].concat(d)}},setupParams:function(a,b,c){var d={},e=[],f=[],g=[],h=!c,i=void 0;h&&(c=[]),d.name=this.quotedString(a),d.hash=this.popStack(),this.trackIds&&(d.hashIds=this.popStack()),this.stringParams&&(d.hashTypes=this.popStack(),d.hashContexts=this.popStack());var j=this.popStack(),k=this.popStack();(k||j)&&(d.fn=k||"container.noop",d.inverse=j||"container.noop");for(var l=b;l--;)i=this.popStack(),c[l]=i,this.trackIds&&(g[l]=this.popStack()),this.stringParams&&(f[l]=this.popStack(),e[l]=this.popStack());return h&&(d.args=this.source.generateArray(c)),this.trackIds&&(d.ids=this.source.generateArray(g)),this.stringParams&&(d.types=this.source.generateArray(f),d.contexts=this.source.generateArray(e)),this.options.data&&(d.data="data"),this.useBlockParams&&(d.blockParams="blockParams"),d},setupHelperArgs:function(a,b,c,d){var e=this.setupParams(a,b,c);return e=this.objectLiteral(e),d?(this.useRegister("options"),c.push("options"),["options=",e]):c?(c.push(e),""):e}},function(){for(var a="break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield await null true false".split(" "),b=e.RESERVED_WORDS={},c=0,d=a.length;c<d;c++)b[a[c]]=!0}(),e.isValidJavaScriptVariableName=function(a){return!e.RESERVED_WORDS[a]&&/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(a)},b["default"]=e,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b,c){if(f.isArray(a)){for(var d=[],e=0,g=a.length;e<g;e++)d.push(b.wrap(a[e],c));return d}return"boolean"==typeof a||"number"==typeof a?a+"":a}function e(a){this.srcFile=a,this.source=[]}b.__esModule=!0;var f=c(5),g=void 0;try{}catch(h){}g||(g=function(a,b,c,d){this.src="",d&&this.add(d)},g.prototype={add:function(a){f.isArray(a)&&(a=a.join("")),this.src+=a},prepend:function(a){f.isArray(a)&&(a=a.join("")),this.src=a+this.src},toStringWithSourceMap:function(){return{code:this.toString()}},toString:function(){return this.src}}),e.prototype={isEmpty:function(){return!this.source.length},prepend:function(a,b){this.source.unshift(this.wrap(a,b))},push:function(a,b){this.source.push(this.wrap(a,b))},merge:function(){var a=this.empty();return this.each(function(b){a.add([" ",b,"\n"])}),a},each:function(a){for(var b=0,c=this.source.length;b<c;b++)a(this.source[b])},empty:function(){var a=this.currentLocation||{start:{}};return new g(a.start.line,a.start.column,this.srcFile)},wrap:function(a){var b=arguments.length<=1||void 0===arguments[1]?this.currentLocation||{start:{}}:arguments[1];return a instanceof g?a:(a=d(a,this,b),new g(b.start.line,b.start.column,this.srcFile,a))},functionCall:function(a,b,c){return c=this.generateList(c),this.wrap([a,b?"."+b+"(":"(",c,")"])},quotedString:function(a){return'"'+(a+"").replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")+'"'},objectLiteral:function(a){var b=[];for(var c in a)if(a.hasOwnProperty(c)){var e=d(a[c],this);"undefined"!==e&&b.push([this.quotedString(c),":",e])}var f=this.generateList(b);return f.prepend("{"),f.add("}"),f},generateList:function(a){for(var b=this.empty(),c=0,e=a.length;c<e;c++)c&&b.add(","),b.add(d(a[c],this));return b},generateArray:function(a){var b=this.generateList(a);return b.prepend("["),b.add("]"),b}},b["default"]=e,a.exports=b["default"]}])});
1
+ /**!
2
+
3
+ @license
4
+ handlebars v4.0.10
5
+
6
+ Copyright (C) 2011-2016 by Yehuda Katz
7
+
8
+ Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ of this software and associated documentation files (the "Software"), to deal
10
+ in the Software without restriction, including without limitation the rights
11
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
+ copies of the Software, and to permit persons to whom the Software is
13
+ furnished to do so, subject to the following conditions:
14
+
15
+ The above copyright notice and this permission notice shall be included in
16
+ all copies or substantial portions of the Software.
17
+
18
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
+ THE SOFTWARE.
25
+
26
+ */
27
+ !function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=r();return a.compile=function(b,c){return k.compile(b,c,a)},a.precompile=function(b,c){return k.precompile(b,c,a)},a.AST=i["default"],a.Compiler=k.Compiler,a.JavaScriptCompiler=m["default"],a.Parser=j.parser,a.parse=j.parse,a}var e=c(1)["default"];b.__esModule=!0;var f=c(2),g=e(f),h=c(35),i=e(h),j=c(36),k=c(41),l=c(42),m=e(l),n=c(39),o=e(n),p=c(34),q=e(p),r=g["default"].create,s=d();s.create=d,q["default"](s),s.Visitor=o["default"],s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(3)["default"],f=c(1)["default"];b.__esModule=!0;var g=c(4),h=e(g),i=c(21),j=f(i),k=c(6),l=f(k),m=c(5),n=e(m),o=c(22),p=e(o),q=c(34),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(1)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(5),g=c(6),h=e(g),i=c(10),j=c(18),k=c(20),l=e(k),m="4.0.10";b.VERSION=m;var n=7;b.COMPILER_REVISION=n;var o={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0"};b.REVISION_CHANGES=o;var p="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===p)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]}};var q=l["default"].log;b.log=q,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function e(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return m.test(a)?a.replace(l,c):a}function g(a){return!a&&0!==a||!(!p(a)||0!==a.length)}function h(a){var b=d({},a);return b._parent=a,b}function i(a,b){return a.path=b,a}function j(a,b){return(a?a+".":"")+b}b.__esModule=!0,b.extend=d,b.indexOf=e,b.escapeExpression=f,b.isEmpty=g,b.createFrame=h,b.blockParams=i,b.appendContextPath=j;var k={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;","=":"&#x3D;"},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0;c&&(g=c.start.line,h=c.start.column,a+=" - "+g+":"+h);for(var i=Error.prototype.constructor.call(this,a),j=0;j<f.length;j++)this[f[j]]=i[f[j]];Error.captureStackTrace&&Error.captureStackTrace(this,d);try{c&&(this.lineNumber=g,e?Object.defineProperty(this,"column",{value:h,enumerable:!0}):this.column=h)}catch(k){}}var e=c(7)["default"];b.__esModule=!0;var f=["description","fileName","lineNumber","message","name","number","stack"];d.prototype=new Error,b["default"]=d,a.exports=b["default"]},function(a,b,c){a.exports={"default":c(8),__esModule:!0}},function(a,b,c){var d=c(9);a.exports=function(a,b,c){return d.setDesc(a,b,c)}},function(a,b){var c=Object;a.exports={create:c.create,getProto:c.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:c.getOwnPropertyDescriptor,setDesc:c.defineProperty,setDescs:c.defineProperties,getKeys:c.keys,getNames:c.getOwnPropertyNames,getSymbols:c.getOwnPropertySymbols,each:[].forEach}},function(a,b,c){"use strict";function d(a){g["default"](a),i["default"](a),k["default"](a),m["default"](a),o["default"](a),q["default"](a),s["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultHelpers=d;var f=c(11),g=e(f),h=c(12),i=e(h),j=c(13),k=e(j),l=c(14),m=e(l),n=c(15),o=e(n),p=c(16),q=e(p),r=c(17),s=e(r)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("blockHelperMissing",function(b,c){var e=c.inverse,f=c.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(d.isArray(b))return b.length>0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(5),f=c(6),g=d(f);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,f){j&&(j.key=b,j.index=c,j.first=0===c,j.last=!!f,k&&(j.contextPath=k+b)),i+=d(a[b],{data:j,blockParams:e.blockParams([a[b],b],[k+b,null])})}if(!b)throw new g["default"]("Must pass iterator to #each");var d=b.fn,f=b.inverse,h=0,i="",j=void 0,k=void 0;if(b.data&&b.ids&&(k=e.appendContextPath(b.data.contextPath,b.ids[0])+"."),e.isFunction(a)&&(a=a.call(this)),b.data&&(j=e.createFrame(b.data)),a&&"object"==typeof a)if(e.isArray(a))for(var l=a.length;h<l;h++)h in a&&c(h,h,h===a.length-1);else{var m=void 0;for(var n in a)a.hasOwnProperty(n)&&(void 0!==m&&c(m,h-1),m=n,h++);void 0!==m&&c(m,h-1,!0)}return 0===h&&(i=f(this)),i})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(6),f=d(e);b["default"]=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new f["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("if",function(a,b){return d.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||d.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("lookup",function(a,b){return a&&a[b]})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("with",function(a,b){d.isFunction(a)&&(a=a.call(this));var c=b.fn;if(d.isEmpty(a))return b.inverse(this);var e=b.data;return b.data&&b.ids&&(e=d.createFrame(b.data),e.contextPath=d.appendContextPath(b.data.contextPath,b.ids[0])),c(a,{data:e,blockParams:d.blockParams([a],[e&&e.contextPath])})})},a.exports=b["default"]},function(a,b,c){"use strict";function d(a){g["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultDecorators=d;var f=c(19),g=e(f)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerDecorator("inline",function(a,b,c,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=c.partials;c.partials=d.extend({},g,b.partials);var h=a(e,f);return c.partials=g,h}),b.partials[e.args[0]]=e.fn,f})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5),e={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if("string"==typeof a){var b=d.indexOf(e.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f<c;f++)d[f-1]=arguments[f];console[b].apply(console,d)}}};b["default"]=e,a.exports=b["default"]},function(a,b){"use strict";function c(a){this.string=a}b.__esModule=!0,c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=s.COMPILER_REVISION;if(b!==c){if(b<c){var d=s.REVISION_CHANGES[c],e=s.REVISION_CHANGES[b];throw new r["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new r["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){function c(c,d,e){e.hash&&(d=p.extend({},d,e.hash),e.ids&&(e.ids[0]=!0)),c=b.VM.resolvePartial.call(this,c,d,e);var f=b.VM.invokePartial.call(this,c,d,e);if(null==f&&b.compile&&(e.partials[e.name]=b.compile(c,a.compilerOptions,b),f=e.partials[e.name](d,e)),null!=f){if(e.indent){for(var g=f.split("\n"),h=0,i=g.length;h<i&&(g[h]||h+1!==i);h++)g[h]=e.indent+g[h];f=g.join("\n")}return f}throw new r["default"]("The partial "+e.name+" could not be compiled when running in runtime-only mode")}function d(b){function c(b){return""+a.main(e,b,e.helpers,e.partials,g,i,h)}var f=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],g=f.data;d._setup(f),!f.partial&&a.useData&&(g=j(b,g));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=f.depths?b!=f.depths[0]?[b].concat(f.depths):f.depths:[b]),(c=k(a.main,c,e,f.depths||[],g,i))(b,f)}if(!b)throw new r["default"]("No environment passed to template");if(!a||!a.main)throw new r["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,b.VM.checkRevision(a.compiler);var e={strict:function(a,b){if(!(b in a))throw new r["default"]('"'+b+'" not defined in '+a);return a[b]},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:p.escapeExpression,invokePartial:c,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var g=this.programs[a],h=this.fn(a);return b||e||d||c?g=f(this,a,h,b,c,d,e):g||(g=this.programs[a]=f(this,a,h)),g},data:function(a,b){for(;a&&b--;)a=a._parent;return a},merge:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=p.extend({},b,a)),c},nullContext:l({}),noop:b.VM.noop,compilerInfo:a.compiler};return d.isTop=!0,d._setup=function(c){c.partial?(e.helpers=c.helpers,e.partials=c.partials,e.decorators=c.decorators):(e.helpers=e.merge(c.helpers,b.helpers),a.usePartial&&(e.partials=e.merge(c.partials,b.partials)),(a.usePartial||a.useDecorators)&&(e.decorators=e.merge(c.decorators,b.decorators)))},d._child=function(b,c,d,g){if(a.useBlockParams&&!d)throw new r["default"]("must pass block params");if(a.useDepths&&!g)throw new r["default"]("must pass parent depths");return f(e,b,a[b],c,0,d,g)},d}function f(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=k(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function g(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function h(a,b,c){var d=c.data&&c.data["partial-block"];c.partial=!0,c.ids&&(c.data.contextPath=c.ids[0]||c.data.contextPath);var e=void 0;if(c.fn&&c.fn!==i&&!function(){c.data=s.createFrame(c.data);var a=c.fn;e=c.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=s.createFrame(c.data),c.data["partial-block"]=d,a(b,c)},a.partials&&(c.partials=p.extend({},c.partials,a.partials))}(),void 0===a&&e&&(a=e),void 0===a)throw new r["default"]("The partial "+c.name+" could not be found");if(a instanceof Function)return a(b,c)}function i(){return""}function j(a,b){return b&&"root"in b||(b=b?s.createFrame(b):{},b.root=a),b}function k(a,b,c,d,e,f){if(a.decorator){var g={};b=a.decorator(b,g,c,d&&d[0],e,f,d),p.extend(b,g)}return b}var l=c(23)["default"],m=c(3)["default"],n=c(1)["default"];b.__esModule=!0,b.checkRevision=d,b.template=e,b.wrapProgram=f,b.resolvePartial=g,b.invokePartial=h,b.noop=i;var o=c(5),p=m(o),q=c(6),r=n(q),s=c(4)},function(a,b,c){a.exports={"default":c(24),__esModule:!0}},function(a,b,c){c(25),a.exports=c(30).Object.seal},function(a,b,c){var d=c(26);c(27)("seal",function(a){return function(b){return a&&d(b)?a(b):b}})},function(a,b){a.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},function(a,b,c){var d=c(28),e=c(30),f=c(33);a.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},function(a,b,c){var d=c(29),e=c(30),f=c(31),g="prototype",h=function(a,b,c){var i,j,k,l=a&h.F,m=a&h.G,n=a&h.S,o=a&h.P,p=a&h.B,q=a&h.W,r=m?e:e[b]||(e[b]={}),s=m?d:n?d[b]:(d[b]||{})[g];m&&(c=b);for(i in c)j=!l&&s&&i in s,j&&i in r||(k=j?s[i]:c[i],r[i]=m&&"function"!=typeof s[i]?c[i]:p&&j?f(k,d):q&&s[i]==k?function(a){var b=function(b){return this instanceof a?new a(b):a(b)};return b[g]=a[g],b}(k):o&&"function"==typeof k?f(Function.call,k):k,o&&((r[g]||(r[g]={}))[i]=k))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,a.exports=h},function(a,b){var c=a.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=c)},function(a,b){var c=a.exports={version:"1.2.6"};"number"==typeof __e&&(__e=c)},function(a,b,c){var d=c(32);a.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},function(a,b){a.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},function(a,b){a.exports=function(a){try{return!!a()}catch(b){return!0}}},function(a,b){(function(c){"use strict";b.__esModule=!0,b["default"]=function(a){var b="undefined"!=typeof c?c:window,d=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=d),a}},a.exports=b["default"]}).call(b,function(){return this}())},function(a,b){"use strict";b.__esModule=!0;var c={helpers:{helperExpression:function(a){return"SubExpression"===a.type||("MustacheStatement"===a.type||"BlockStatement"===a.type)&&!!(a.params&&a.params.length||a.hash)},scopedId:function(a){return/^\.|this\b/.test(a.original)},simpleId:function(a){return 1===a.parts.length&&!c.helpers.scopedId(a)&&!a.depth}}};b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if("Program"===a.type)return a;h["default"].yy=n,n.locInfo=function(a){return new n.SourceLocation(b&&b.srcName,a)};var c=new j["default"](b);return c.accept(h["default"].parse(a))}var e=c(1)["default"],f=c(3)["default"];b.__esModule=!0,b.parse=d;var g=c(37),h=e(g),i=c(38),j=e(i),k=c(40),l=f(k),m=c(5);b.parser=h["default"];var n={};m.extend(n,l)},function(a,b){"use strict";b.__esModule=!0;var c=function(){function a(){this.yy={}}var b={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,program_repetition0:6,statement:7,mustache:8,block:9,rawBlock:10,partial:11,partialBlock:12,content:13,COMMENT:14,CONTENT:15,openRawBlock:16,rawBlock_repetition_plus0:17,END_RAW_BLOCK:18,OPEN_RAW_BLOCK:19,helperName:20,openRawBlock_repetition0:21,openRawBlock_option0:22,CLOSE_RAW_BLOCK:23,openBlock:24,block_option0:25,closeBlock:26,openInverse:27,block_option1:28,OPEN_BLOCK:29,openBlock_repetition0:30,openBlock_option0:31,openBlock_option1:32,CLOSE:33,OPEN_INVERSE:34,openInverse_repetition0:35,openInverse_option0:36,openInverse_option1:37,openInverseChain:38,OPEN_INVERSE_CHAIN:39,openInverseChain_repetition0:40,openInverseChain_option0:41,openInverseChain_option1:42,inverseAndProgram:43,INVERSE:44,inverseChain:45,inverseChain_option0:46,OPEN_ENDBLOCK:47,OPEN:48,mustache_repetition0:49,mustache_option0:50,OPEN_UNESCAPED:51,mustache_repetition1:52,mustache_option1:53,CLOSE_UNESCAPED:54,OPEN_PARTIAL:55,partialName:56,partial_repetition0:57,partial_option0:58,openPartialBlock:59,OPEN_PARTIAL_BLOCK:60,openPartialBlock_repetition0:61,openPartialBlock_option0:62,param:63,sexpr:64,OPEN_SEXPR:65,sexpr_repetition0:66,sexpr_option0:67,CLOSE_SEXPR:68,hash:69,hash_repetition_plus0:70,hashSegment:71,ID:72,EQUALS:73,blockParams:74,OPEN_BLOCK_PARAMS:75,blockParams_repetition_plus0:76,CLOSE_BLOCK_PARAMS:77,path:78,dataName:79,STRING:80,NUMBER:81,BOOLEAN:82,UNDEFINED:83,NULL:84,DATA:85,pathSegments:86,SEP:87,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",14:"COMMENT",15:"CONTENT",18:"END_RAW_BLOCK",19:"OPEN_RAW_BLOCK",23:"CLOSE_RAW_BLOCK",29:"OPEN_BLOCK",33:"CLOSE",34:"OPEN_INVERSE",39:"OPEN_INVERSE_CHAIN",44:"INVERSE",47:"OPEN_ENDBLOCK",48:"OPEN",51:"OPEN_UNESCAPED",54:"CLOSE_UNESCAPED",55:"OPEN_PARTIAL",60:"OPEN_PARTIAL_BLOCK",65:"OPEN_SEXPR",68:"CLOSE_SEXPR",72:"ID",73:"EQUALS",75:"OPEN_BLOCK_PARAMS",77:"CLOSE_BLOCK_PARAMS",80:"STRING",81:"NUMBER",82:"BOOLEAN",83:"UNDEFINED",84:"NULL",85:"DATA",87:"SEP"},productions_:[0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[13,1],[10,3],[16,5],[9,4],[9,4],[24,6],[27,6],[38,6],[43,2],[45,3],[45,1],[26,3],[8,5],[8,5],[11,5],[12,3],[59,5],[63,1],[63,1],[64,5],[69,1],[71,3],[74,3],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[56,1],[56,1],[79,2],[78,1],[86,3],[86,1],[6,0],[6,2],[17,1],[17,2],[21,0],[21,2],[22,0],[22,1],[25,0],[25,1],[28,0],[28,1],[30,0],[30,2],[31,0],[31,1],[32,0],[32,1],[35,0],[35,2],[36,0],[36,1],[37,0],[37,1],[40,0],[40,2],[41,0],[41,1],[42,0],[42,1],[46,0],[46,1],[49,0],[49,2],[50,0],[50,1],[52,0],[52,2],[53,0],[53,1],[57,0],[57,2],[58,0],[58,1],[61,0],[61,2],[62,0],[62,1],[66,0],[66,2],[67,0],[67,1],[70,1],[70,2],[76,1],[76,2]],performAction:function(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return f[h-1];case 2:this.$=d.prepareProgram(f[h]);break;case 3:this.$=f[h];break;case 4:this.$=f[h];break;case 5:this.$=f[h];break;case 6:this.$=f[h];break;case 7:this.$=f[h];break;case 8:this.$=f[h];break;case 9:this.$={type:"CommentStatement",value:d.stripComment(f[h]),strip:d.stripFlags(f[h],f[h]),loc:d.locInfo(this._$)};break;case 10:this.$={type:"ContentStatement",original:f[h],value:f[h],loc:d.locInfo(this._$)};break;case 11:this.$=d.prepareRawBlock(f[h-2],f[h-1],f[h],this._$);break;case 12:this.$={path:f[h-3],params:f[h-2],hash:f[h-1]};break;case 13:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!1,this._$);break;case 14:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!0,this._$);break;case 15:this.$={open:f[h-5],path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 16:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 17:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 18:this.$={strip:d.stripFlags(f[h-1],f[h-1]),program:f[h]};break;case 19:var i=d.prepareBlock(f[h-2],f[h-1],f[h],f[h],!1,this._$),j=d.prepareProgram([i],f[h-1].loc);j.chained=!0,this.$={strip:f[h-2].strip,program:j,chain:!0};break;case 20:this.$=f[h];break;case 21:this.$={path:f[h-1],strip:d.stripFlags(f[h-2],f[h])};break;case 22:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 23:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 24:this.$={type:"PartialStatement",name:f[h-3],params:f[h-2],hash:f[h-1],indent:"",strip:d.stripFlags(f[h-4],f[h]),loc:d.locInfo(this._$)};break;case 25:this.$=d.preparePartialBlock(f[h-2],f[h-1],f[h],this._$);break;case 26:this.$={path:f[h-3],params:f[h-2],hash:f[h-1],strip:d.stripFlags(f[h-4],f[h])};break;case 27:this.$=f[h];break;case 28:this.$=f[h];break;case 29:this.$={type:"SubExpression",path:f[h-3],params:f[h-2],hash:f[h-1],loc:d.locInfo(this._$)};break;case 30:this.$={type:"Hash",pairs:f[h],loc:d.locInfo(this._$)};break;case 31:this.$={type:"HashPair",key:d.id(f[h-2]),value:f[h],loc:d.locInfo(this._$)};break;case 32:this.$=d.id(f[h-1]);break;case 33:this.$=f[h];break;case 34:this.$=f[h];break;case 35:this.$={type:"StringLiteral",value:f[h],original:f[h],loc:d.locInfo(this._$)};break;case 36:this.$={type:"NumberLiteral",value:Number(f[h]),original:Number(f[h]),loc:d.locInfo(this._$)};break;case 37:this.$={type:"BooleanLiteral",value:"true"===f[h],original:"true"===f[h],loc:d.locInfo(this._$)};break;case 38:this.$={type:"UndefinedLiteral",original:void 0,value:void 0,loc:d.locInfo(this._$)};break;case 39:this.$={type:"NullLiteral",original:null,value:null,loc:d.locInfo(this._$)};break;case 40:this.$=f[h];break;case 41:this.$=f[h];break;case 42:this.$=d.preparePath(!0,f[h],this._$);break;case 43:this.$=d.preparePath(!1,f[h],this._$);break;case 44:f[h-2].push({part:d.id(f[h]),original:f[h],separator:f[h-1]}),this.$=f[h-2];break;case 45:this.$=[{part:d.id(f[h]),original:f[h]}];break;case 46:this.$=[];break;case 47:f[h-1].push(f[h]);break;case 48:this.$=[f[h]];break;case 49:f[h-1].push(f[h]);break;case 50:this.$=[];break;case 51:f[h-1].push(f[h]);break;case 58:this.$=[];break;case 59:f[h-1].push(f[h]);break;case 64:this.$=[];break;case 65:f[h-1].push(f[h]);break;case 70:this.$=[];break;case 71:f[h-1].push(f[h]);break;case 78:this.$=[];break;case 79:f[h-1].push(f[h]);break;case 82:this.$=[];break;case 83:f[h-1].push(f[h]);break;case 86:this.$=[];break;case 87:f[h-1].push(f[h]);break;case 90:this.$=[];break;case 91:f[h-1].push(f[h]);break;case 94:this.$=[];break;case 95:f[h-1].push(f[h]);break;case 98:this.$=[f[h]];break;case 99:f[h-1].push(f[h]);break;case 100:this.$=[f[h]];break;case 101:f[h-1].push(f[h])}},table:[{3:1,4:2,5:[2,46],6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:11,14:[1,12],15:[1,20],16:17,19:[1,23],24:15,27:16,29:[1,21],34:[1,22],39:[2,2],44:[2,2],47:[2,2],48:[1,13],51:[1,14],55:[1,18],59:19,60:[1,24]},{1:[2,1]},{5:[2,47],14:[2,47],15:[2,47],19:[2,47],29:[2,47],34:[2,47],39:[2,47],44:[2,47],47:[2,47],48:[2,47],51:[2,47],55:[2,47],60:[2,47]},{5:[2,3],14:[2,3],15:[2,3],19:[2,3],29:[2,3],34:[2,3],39:[2,3],44:[2,3],47:[2,3],48:[2,3],51:[2,3],55:[2,3],60:[2,3]},{5:[2,4],14:[2,4],15:[2,4],19:[2,4],29:[2,4],34:[2,4],39:[2,4],44:[2,4],47:[2,4],48:[2,4],51:[2,4],55:[2,4],60:[2,4]},{5:[2,5],14:[2,5],15:[2,5],19:[2,5],29:[2,5],34:[2,5],39:[2,5],44:[2,5],47:[2,5],48:[2,5],51:[2,5],55:[2,5],60:[2,5]},{5:[2,6],14:[2,6],15:[2,6],19:[2,6],29:[2,6],34:[2,6],39:[2,6],44:[2,6],47:[2,6],48:[2,6],51:[2,6],55:[2,6],60:[2,6]},{5:[2,7],14:[2,7],15:[2,7],19:[2,7],29:[2,7],34:[2,7],39:[2,7],44:[2,7],47:[2,7],48:[2,7],51:[2,7],55:[2,7],60:[2,7]},{5:[2,8],14:[2,8],15:[2,8],19:[2,8],29:[2,8],34:[2,8],39:[2,8],44:[2,8],47:[2,8],48:[2,8],51:[2,8],55:[2,8],60:[2,8]},{5:[2,9],14:[2,9],15:[2,9],19:[2,9],29:[2,9],34:[2,9],39:[2,9],44:[2,9],47:[2,9],48:[2,9],51:[2,9],55:[2,9],60:[2,9]},{20:25,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:36,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:37,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{4:38,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{13:40,15:[1,20],17:39},{20:42,56:41,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:45,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{5:[2,10],14:[2,10],15:[2,10],18:[2,10],19:[2,10],29:[2,10],34:[2,10],39:[2,10],44:[2,10],47:[2,10],48:[2,10],51:[2,10],55:[2,10],60:[2,10]},{20:46,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:47,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:48,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:42,56:49,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[2,78],49:50,65:[2,78],72:[2,78],80:[2,78],81:[2,78],82:[2,78],83:[2,78],84:[2,78],85:[2,78]},{23:[2,33],33:[2,33],54:[2,33],65:[2,33],68:[2,33],72:[2,33],75:[2,33],80:[2,33],81:[2,33],82:[2,33],83:[2,33],84:[2,33],85:[2,33]},{23:[2,34],33:[2,34],54:[2,34],65:[2,34],68:[2,34],72:[2,34],75:[2,34],80:[2,34],81:[2,34],82:[2,34],83:[2,34],84:[2,34],85:[2,34]},{23:[2,35],33:[2,35],54:[2,35],65:[2,35],68:[2,35],72:[2,35],75:[2,35],80:[2,35],81:[2,35],82:[2,35],83:[2,35],84:[2,35],85:[2,35]},{23:[2,36],33:[2,36],54:[2,36],65:[2,36],68:[2,36],72:[2,36],75:[2,36],80:[2,36],81:[2,36],82:[2,36],83:[2,36],84:[2,36],85:[2,36]},{23:[2,37],33:[2,37],54:[2,37],65:[2,37],68:[2,37],72:[2,37],75:[2,37],80:[2,37],81:[2,37],82:[2,37],83:[2,37],84:[2,37],85:[2,37]},{23:[2,38],33:[2,38],54:[2,38],65:[2,38],68:[2,38],72:[2,38],75:[2,38],80:[2,38],81:[2,38],82:[2,38],83:[2,38],84:[2,38],85:[2,38]},{23:[2,39],33:[2,39],54:[2,39],65:[2,39],68:[2,39],72:[2,39],75:[2,39],80:[2,39],81:[2,39],82:[2,39],83:[2,39],84:[2,39],85:[2,39]},{23:[2,43],33:[2,43],54:[2,43],65:[2,43],68:[2,43],72:[2,43],75:[2,43],80:[2,43],81:[2,43],82:[2,43],83:[2,43],84:[2,43],85:[2,43],87:[1,51]},{72:[1,35],86:52},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{52:53,54:[2,82],65:[2,82],72:[2,82],80:[2,82],81:[2,82],82:[2,82],83:[2,82],84:[2,82],85:[2,82]},{25:54,38:56,39:[1,58],43:57,44:[1,59],45:55,47:[2,54]},{28:60,43:61,44:[1,59],47:[2,56]},{13:63,15:[1,20],18:[1,62]},{15:[2,48],18:[2,48]},{33:[2,86],57:64,65:[2,86],72:[2,86],80:[2,86],81:[2,86],82:[2,86],83:[2,86],84:[2,86],85:[2,86]},{33:[2,40],65:[2,40],72:[2,40],80:[2,40],81:[2,40],82:[2,40],83:[2,40],84:[2,40],85:[2,40]},{33:[2,41],65:[2,41],72:[2,41],80:[2,41],81:[2,41],82:[2,41],83:[2,41],84:[2,41],85:[2,41]},{20:65,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:66,47:[1,67]},{30:68,33:[2,58],65:[2,58],72:[2,58],75:[2,58],80:[2,58],81:[2,58],82:[2,58],83:[2,58],84:[2,58],85:[2,58]},{33:[2,64],35:69,65:[2,64],72:[2,64],75:[2,64],80:[2,64],81:[2,64],82:[2,64],83:[2,64],84:[2,64],85:[2,64]},{21:70,23:[2,50],65:[2,50],72:[2,50],80:[2,50],81:[2,50],82:[2,50],83:[2,50],84:[2,50],85:[2,50]},{33:[2,90],61:71,65:[2,90],72:[2,90],80:[2,90],81:[2,90],82:[2,90],83:[2,90],84:[2,90],85:[2,90]},{20:75,33:[2,80],50:72,63:73,64:76,65:[1,44],69:74,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{72:[1,80]},{23:[2,42],33:[2,42],54:[2,42],65:[2,42],68:[2,42],72:[2,42],75:[2,42],80:[2,42],81:[2,42],82:[2,42],83:[2,42],84:[2,42],85:[2,42],87:[1,51]},{20:75,53:81,54:[2,84],63:82,64:76,65:[1,44],69:83,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:84,47:[1,67]},{47:[2,55]},{4:85,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{47:[2,20]},{20:86,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:87,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{26:88,47:[1,67]},{47:[2,57]},{5:[2,11],14:[2,11],15:[2,11],19:[2,11],29:[2,11],34:[2,11],39:[2,11],44:[2,11],47:[2,11],48:[2,11],51:[2,11],55:[2,11],60:[2,11]},{15:[2,49],18:[2,49]},{20:75,33:[2,88],58:89,63:90,64:76,65:[1,44],69:91,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{65:[2,94],66:92,68:[2,94],72:[2,94],80:[2,94],81:[2,94],82:[2,94],83:[2,94],84:[2,94],85:[2,94]},{5:[2,25],14:[2,25],15:[2,25],19:[2,25],29:[2,25],34:[2,25],39:[2,25],44:[2,25],47:[2,25],48:[2,25],51:[2,25],55:[2,25],60:[2,25]},{20:93,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,31:94,33:[2,60],63:95,64:76,65:[1,44],69:96,70:77,71:78,72:[1,79],75:[2,60],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,66],36:97,63:98,64:76,65:[1,44],69:99,70:77,71:78,72:[1,79],75:[2,66],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,22:100,23:[2,52],63:101,64:76,65:[1,44],69:102,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,92],62:103,63:104,64:76,65:[1,44],69:105,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,106]},{33:[2,79],65:[2,79],72:[2,79],80:[2,79],81:[2,79],82:[2,79],83:[2,79],84:[2,79],85:[2,79]},{33:[2,81]},{23:[2,27],33:[2,27],54:[2,27],65:[2,27],68:[2,27],72:[2,27],75:[2,27],80:[2,27],81:[2,27],82:[2,27],83:[2,27],84:[2,27],85:[2,27]},{23:[2,28],33:[2,28],54:[2,28],65:[2,28],68:[2,28],72:[2,28],75:[2,28],80:[2,28],81:[2,28],82:[2,28],83:[2,28],84:[2,28],85:[2,28]},{23:[2,30],33:[2,30],54:[2,30],68:[2,30],71:107,72:[1,108],75:[2,30]},{23:[2,98],33:[2,98],54:[2,98],68:[2,98],72:[2,98],75:[2,98]},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],73:[1,109],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{23:[2,44],33:[2,44],54:[2,44],65:[2,44],68:[2,44],72:[2,44],75:[2,44],80:[2,44],81:[2,44],82:[2,44],83:[2,44],84:[2,44],85:[2,44],87:[2,44]},{54:[1,110]},{54:[2,83],65:[2,83],72:[2,83],80:[2,83],81:[2,83],82:[2,83],83:[2,83],84:[2,83],85:[2,83]},{54:[2,85]},{5:[2,13],14:[2,13],15:[2,13],19:[2,13],29:[2,13],34:[2,13],39:[2,13],44:[2,13],47:[2,13],48:[2,13],51:[2,13],55:[2,13],60:[2,13]},{38:56,39:[1,58],43:57,44:[1,59],45:112,46:111,47:[2,76]},{33:[2,70],40:113,65:[2,70],72:[2,70],75:[2,70],80:[2,70],81:[2,70],82:[2,70],83:[2,70],84:[2,70],85:[2,70]},{47:[2,18]},{5:[2,14],14:[2,14],15:[2,14],19:[2,14],29:[2,14],34:[2,14],39:[2,14],44:[2,14],47:[2,14],48:[2,14],51:[2,14],55:[2,14],60:[2,14]},{33:[1,114]},{33:[2,87],65:[2,87],72:[2,87],80:[2,87],81:[2,87],82:[2,87],83:[2,87],84:[2,87],
28
+ 85:[2,87]},{33:[2,89]},{20:75,63:116,64:76,65:[1,44],67:115,68:[2,96],69:117,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,118]},{32:119,33:[2,62],74:120,75:[1,121]},{33:[2,59],65:[2,59],72:[2,59],75:[2,59],80:[2,59],81:[2,59],82:[2,59],83:[2,59],84:[2,59],85:[2,59]},{33:[2,61],75:[2,61]},{33:[2,68],37:122,74:123,75:[1,121]},{33:[2,65],65:[2,65],72:[2,65],75:[2,65],80:[2,65],81:[2,65],82:[2,65],83:[2,65],84:[2,65],85:[2,65]},{33:[2,67],75:[2,67]},{23:[1,124]},{23:[2,51],65:[2,51],72:[2,51],80:[2,51],81:[2,51],82:[2,51],83:[2,51],84:[2,51],85:[2,51]},{23:[2,53]},{33:[1,125]},{33:[2,91],65:[2,91],72:[2,91],80:[2,91],81:[2,91],82:[2,91],83:[2,91],84:[2,91],85:[2,91]},{33:[2,93]},{5:[2,22],14:[2,22],15:[2,22],19:[2,22],29:[2,22],34:[2,22],39:[2,22],44:[2,22],47:[2,22],48:[2,22],51:[2,22],55:[2,22],60:[2,22]},{23:[2,99],33:[2,99],54:[2,99],68:[2,99],72:[2,99],75:[2,99]},{73:[1,109]},{20:75,63:126,64:76,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,23],14:[2,23],15:[2,23],19:[2,23],29:[2,23],34:[2,23],39:[2,23],44:[2,23],47:[2,23],48:[2,23],51:[2,23],55:[2,23],60:[2,23]},{47:[2,19]},{47:[2,77]},{20:75,33:[2,72],41:127,63:128,64:76,65:[1,44],69:129,70:77,71:78,72:[1,79],75:[2,72],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,24],14:[2,24],15:[2,24],19:[2,24],29:[2,24],34:[2,24],39:[2,24],44:[2,24],47:[2,24],48:[2,24],51:[2,24],55:[2,24],60:[2,24]},{68:[1,130]},{65:[2,95],68:[2,95],72:[2,95],80:[2,95],81:[2,95],82:[2,95],83:[2,95],84:[2,95],85:[2,95]},{68:[2,97]},{5:[2,21],14:[2,21],15:[2,21],19:[2,21],29:[2,21],34:[2,21],39:[2,21],44:[2,21],47:[2,21],48:[2,21],51:[2,21],55:[2,21],60:[2,21]},{33:[1,131]},{33:[2,63]},{72:[1,133],76:132},{33:[1,134]},{33:[2,69]},{15:[2,12]},{14:[2,26],15:[2,26],19:[2,26],29:[2,26],34:[2,26],47:[2,26],48:[2,26],51:[2,26],55:[2,26],60:[2,26]},{23:[2,31],33:[2,31],54:[2,31],68:[2,31],72:[2,31],75:[2,31]},{33:[2,74],42:135,74:136,75:[1,121]},{33:[2,71],65:[2,71],72:[2,71],75:[2,71],80:[2,71],81:[2,71],82:[2,71],83:[2,71],84:[2,71],85:[2,71]},{33:[2,73],75:[2,73]},{23:[2,29],33:[2,29],54:[2,29],65:[2,29],68:[2,29],72:[2,29],75:[2,29],80:[2,29],81:[2,29],82:[2,29],83:[2,29],84:[2,29],85:[2,29]},{14:[2,15],15:[2,15],19:[2,15],29:[2,15],34:[2,15],39:[2,15],44:[2,15],47:[2,15],48:[2,15],51:[2,15],55:[2,15],60:[2,15]},{72:[1,138],77:[1,137]},{72:[2,100],77:[2,100]},{14:[2,16],15:[2,16],19:[2,16],29:[2,16],34:[2,16],44:[2,16],47:[2,16],48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,139]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],defaultActions:{4:[2,1],55:[2,55],57:[2,20],61:[2,57],74:[2,81],83:[2,85],87:[2,18],91:[2,89],102:[2,53],105:[2,93],111:[2,19],112:[2,77],117:[2,97],120:[2,63],123:[2,69],124:[2,12],136:[2,75],137:[2,32]},parseError:function(a,b){throw new Error(a)},parse:function(a){function b(){var a;return a=c.lexer.lex()||1,"number"!=typeof a&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var l=this.lexer.yylloc;f.push(l);var m=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var n,o,p,q,r,s,t,u,v,w={};;){if(p=d[d.length-1],this.defaultActions[p]?q=this.defaultActions[p]:(null!==n&&"undefined"!=typeof n||(n=b()),q=g[p]&&g[p][n]),"undefined"==typeof q||!q.length||!q[0]){var x="";if(!k){v=[];for(s in g[p])this.terminals_[s]&&s>2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;g<f.length&&(c=this._input.match(this.rules[f[g]]),!c||b&&!(c[0].length>b[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substr(a,b.yyleng-c)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(b.yytext=b.yytext.substr(5,b.yyleng-9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(b.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return b.yytext=e(1,2).replace(/\\"/g,'"'),80;case 32:return b.yytext=e(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return b.yytext=b.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=a}function e(a,b,c){void 0===b&&(b=a.length);var d=a[b-1],e=a[b-2];return d?"ContentStatement"===d.type?(e||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:c}function f(a,b,c){void 0===b&&(b=-1);var d=a[b+1],e=a[b+2];return d?"ContentStatement"===d.type?(e||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:c}function g(a,b,c){var d=a[null==b?0:b+1];if(d&&"ContentStatement"===d.type&&(c||!d.rightStripped)){var e=d.value;d.value=d.value.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.value!==e}}function h(a,b,c){var d=a[null==b?a.length-1:b-1];if(d&&"ContentStatement"===d.type&&(c||!d.leftStripped)){var e=d.value;return d.value=d.value.replace(c?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.value!==e,d.leftStripped}}var i=c(1)["default"];b.__esModule=!0;var j=c(39),k=i(j);d.prototype=new k["default"],d.prototype.Program=function(a){var b=!this.options.ignoreStandalone,c=!this.isRootSeen;this.isRootSeen=!0;for(var d=a.body,i=0,j=d.length;i<j;i++){var k=d[i],l=this.accept(k);if(l){var m=e(d,i,c),n=f(d,i,c),o=l.openStandalone&&m,p=l.closeStandalone&&n,q=l.inlineStandalone&&m&&n;l.close&&g(d,i,!0),l.open&&h(d,i,!0),b&&q&&(g(d,i),h(d,i)&&"PartialStatement"===k.type&&(k.indent=/([ \t]+$)/.exec(d[i-1].original)[1])),b&&o&&(g((k.program||k.inverse).body),h(d,i)),b&&p&&(g(d,i),h((k.inverse||k.program).body))}}return a},d.prototype.BlockStatement=d.prototype.DecoratorBlock=d.prototype.PartialBlockStatement=function(a){this.accept(a.program),this.accept(a.inverse);var b=a.program||a.inverse,c=a.program&&a.inverse,d=c,i=c;if(c&&c.chained)for(d=c.body[0].program;i.chained;)i=i.body[i.body.length-1].program;var j={open:a.openStrip.open,close:a.closeStrip.close,openStandalone:f(b.body),closeStandalone:e((d||b).body)};if(a.openStrip.close&&g(b.body,null,!0),c){var k=a.inverseStrip;k.open&&h(b.body,null,!0),k.close&&g(d.body,null,!0),a.closeStrip.open&&h(i.body,null,!0),!this.options.ignoreStandalone&&e(b.body)&&f(d.body)&&(h(b.body),g(d.body))}else a.closeStrip.open&&h(b.body,null,!0);return j},d.prototype.Decorator=d.prototype.MustacheStatement=function(a){return a.strip},d.prototype.PartialStatement=d.prototype.CommentStatement=function(a){var b=a.strip||{};return{inlineStandalone:!0,open:b.open,close:b.close}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(){this.parents=[]}function e(a){this.acceptRequired(a,"path"),this.acceptArray(a.params),this.acceptKey(a,"hash")}function f(a){e.call(this,a),this.acceptKey(a,"program"),this.acceptKey(a,"inverse")}function g(a){this.acceptRequired(a,"name"),this.acceptArray(a.params),this.acceptKey(a,"hash")}var h=c(1)["default"];b.__esModule=!0;var i=c(6),j=h(i);d.prototype={constructor:d,mutating:!1,acceptKey:function(a,b){var c=this.accept(a[b]);if(this.mutating){if(c&&!d.prototype[c.type])throw new j["default"]('Unexpected node type "'+c.type+'" found when accepting '+b+" on "+a.type);a[b]=c}},acceptRequired:function(a,b){if(this.acceptKey(a,b),!a[b])throw new j["default"](a.type+" requires "+b)},acceptArray:function(a){for(var b=0,c=a.length;b<c;b++)this.acceptKey(a,b),a[b]||(a.splice(b,1),b--,c--)},accept:function(a){if(a){if(!this[a.type])throw new j["default"]("Unknown type: "+a.type,a);this.current&&this.parents.unshift(this.current),this.current=a;var b=this[a.type](a);return this.current=this.parents.shift(),!this.mutating||b?b:b!==!1?a:void 0}},Program:function(a){this.acceptArray(a.body)},MustacheStatement:e,Decorator:e,BlockStatement:f,DecoratorBlock:f,PartialStatement:g,PartialBlockStatement:function(a){g.call(this,a),this.acceptKey(a,"program")},ContentStatement:function(){},CommentStatement:function(){},SubExpression:e,PathExpression:function(){},StringLiteral:function(){},NumberLiteral:function(){},BooleanLiteral:function(){},UndefinedLiteral:function(){},NullLiteral:function(){},Hash:function(a){this.acceptArray(a.pairs)},HashPair:function(a){this.acceptRequired(a,"value")}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if(b=b.path?b.path.original:b,a.path.original!==b){var c={loc:a.path.loc};throw new q["default"](a.path.original+" doesn't match "+b,c)}}function e(a,b){this.source=a,this.start={line:b.first_line,column:b.first_column},this.end={line:b.last_line,column:b.last_column}}function f(a){return/^\[.*\]$/.test(a)?a.substr(1,a.length-2):a}function g(a,b){return{open:"~"===a.charAt(2),close:"~"===b.charAt(b.length-3)}}function h(a){return a.replace(/^\{\{~?\!-?-?/,"").replace(/-?-?~?\}\}$/,"")}function i(a,b,c){c=this.locInfo(c);for(var d=a?"@":"",e=[],f=0,g="",h=0,i=b.length;h<i;h++){var j=b[h].part,k=b[h].original!==j;if(d+=(b[h].separator||"")+j,k||".."!==j&&"."!==j&&"this"!==j)e.push(j);else{if(e.length>0)throw new q["default"]("Invalid path: "+d,{loc:c});".."===j&&(f++,g+="../")}}return{type:"PathExpression",data:a,depth:f,parts:e,original:d,loc:c}}function j(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g,i=/\*/.test(d);return{type:i?"Decorator":"MustacheStatement",path:a,params:b,hash:c,escaped:h,strip:e,loc:this.locInfo(f)}}function k(a,b,c,e){d(a,c),e=this.locInfo(e);var f={type:"Program",body:b,strip:{},loc:e};return{type:"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:f,openStrip:{},inverseStrip:{},closeStrip:{},loc:e}}function l(a,b,c,e,f,g){e&&e.path&&d(a,e);var h=/\*/.test(a.open);b.blockParams=a.blockParams;var i=void 0,j=void 0;if(c){if(h)throw new q["default"]("Unexpected inverse block on decorator",c);c.chain&&(c.program.body[0].closeStrip=e.strip),j=c.strip,i=c.program}return f&&(f=i,i=b,b=f),{type:h?"DecoratorBlock":"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:b,inverse:i,openStrip:a.strip,inverseStrip:j,closeStrip:e&&e.strip,loc:this.locInfo(g)}}function m(a,b){if(!b&&a.length){var c=a[0].loc,d=a[a.length-1].loc;c&&d&&(b={source:c.source,start:{line:c.start.line,column:c.start.column},end:{line:d.end.line,column:d.end.column}})}return{type:"Program",body:a,strip:{},loc:b}}function n(a,b,c,e){return d(a,c),{type:"PartialBlockStatement",name:a.path,params:a.params,hash:a.hash,program:b,openStrip:a.strip,closeStrip:c&&c.strip,loc:this.locInfo(e)}}var o=c(1)["default"];b.__esModule=!0,b.SourceLocation=e,b.id=f,b.stripFlags=g,b.stripComment=h,b.preparePath=i,b.prepareMustache=j,b.prepareRawBlock=k,b.prepareBlock=l,b.prepareProgram=m,b.preparePartialBlock=n;var p=c(6),q=o(p)},function(a,b,c){"use strict";function d(){}function e(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function f(a,b,c){function d(){var d=c.parse(a,b),e=(new c.Compiler).compile(d,b),f=(new c.JavaScriptCompiler).compile(e,b,void 0,!0);return c.template(f)}function e(a,b){return f||(f=d()),f.call(this,a,b)}if(void 0===b&&(b={}),null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);b=l.extend({},b),"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var f=void 0;return e._setup=function(a){return f||(f=d()),f._setup(a)},e._child=function(a,b,c,e){return f||(f=d()),f._child(a,b,c,e)},e}function g(a,b){if(a===b)return!0;if(l.isArray(a)&&l.isArray(b)&&a.length===b.length){for(var c=0;c<a.length;c++)if(!g(a[c],b[c]))return!1;return!0}}function h(a){if(!a.path.parts){var b=a.path;a.path={type:"PathExpression",data:!1,depth:0,parts:[b.original+""],original:b.original+"",loc:b.loc}}}var i=c(1)["default"];b.__esModule=!0,b.Compiler=d,b.precompile=e,b.compile=f;var j=c(6),k=i(j),l=c(5),m=c(35),n=i(m),o=[].slice;d.prototype={compiler:d,equals:function(a){var b=this.opcodes.length;if(a.opcodes.length!==b)return!1;for(var c=0;c<b;c++){var d=this.opcodes[c],e=a.opcodes[c];if(d.opcode!==e.opcode||!g(d.args,e.args))return!1}b=this.children.length;for(var c=0;c<b;c++)if(!this.children[c].equals(a.children[c]))return!1;return!0},guid:0,compile:function(a,b){this.sourceNode=[],this.opcodes=[],this.children=[],this.options=b,this.stringParams=b.stringParams,this.trackIds=b.trackIds,b.blockParams=b.blockParams||[];var c=b.knownHelpers;if(b.knownHelpers={helperMissing:!0,blockHelperMissing:!0,each:!0,"if":!0,unless:!0,"with":!0,log:!0,lookup:!0},c)for(var d in c)d in c&&(this.options.knownHelpers[d]=c[d]);return this.accept(a)},compileProgram:function(a){var b=new this.compiler,c=b.compile(a,this.options),d=this.guid++;return this.usePartial=this.usePartial||c.usePartial,this.children[d]=c,this.useDepths=this.useDepths||c.useDepths,d},accept:function(a){if(!this[a.type])throw new k["default"]("Unknown type: "+a.type,a);this.sourceNode.unshift(a);var b=this[a.type](a);return this.sourceNode.shift(),b},Program:function(a){this.options.blockParams.unshift(a.blockParams);for(var b=a.body,c=b.length,d=0;d<c;d++)this.accept(b[d]);return this.options.blockParams.shift(),this.isSimple=1===c,this.blockParams=a.blockParams?a.blockParams.length:0,this},BlockStatement:function(a){h(a);var b=a.program,c=a.inverse;b=b&&this.compileProgram(b),c=c&&this.compileProgram(c);var d=this.classifySexpr(a);"helper"===d?this.helperSexpr(a,b,c):"simple"===d?(this.simpleSexpr(a),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("blockValue",a.path.original)):(this.ambiguousSexpr(a,b,c),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("ambiguousBlockValue")),this.opcode("append")},DecoratorBlock:function(a){var b=a.program&&this.compileProgram(a.program),c=this.setupFullMustacheParams(a,b,void 0),d=a.path;this.useDecorators=!0,this.opcode("registerDecorator",c.length,d.original)},PartialStatement:function(a){this.usePartial=!0;var b=a.program;b&&(b=this.compileProgram(a.program));var c=a.params;if(c.length>1)throw new k["default"]("Unsupported number of partial arguments: "+c.length,a);c.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):c.push({type:"PathExpression",parts:[],depth:0}));var d=a.name.original,e="SubExpression"===a.name.type;e&&this.accept(a.name),this.setupFullMustacheParams(a,b,void 0,!0);var f=a.indent||"";this.options.preventIndent&&f&&(this.opcode("appendContent",f),f=""),this.opcode("invokePartial",e,d,f),this.opcode("append")},PartialBlockStatement:function(a){this.PartialStatement(a)},MustacheStatement:function(a){this.SubExpression(a),a.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(a){this.DecoratorBlock(a)},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){h(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),d.strict=!0,this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.path;b.strict=!0,this.accept(b),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new k["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.strict=!0,e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,n["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=n["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts,a.strict)):this.opcode("lookupOnContext",a.parts,a.falsy,a.strict,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");c<d;c++)this.pushParam(b[c].value);for(;c--;)this.opcode("assignToHash",b[c].key);this.opcode("popHash")},opcode:function(a){this.opcodes.push({opcode:a,args:o.call(arguments,1),loc:this.sourceNode[0].loc})},addDepth:function(a){a&&(this.useDepths=!0)},classifySexpr:function(a){var b=n["default"].helpers.simpleId(a.path),c=b&&!!this.blockParamIndex(a.path.parts[0]),d=!c&&n["default"].helpers.helperExpression(a),e=!c&&(d||b);if(e&&!d){var f=a.path.parts[0],g=this.options;g.knownHelpers[f]?d=!0:g.knownHelpersOnly&&(e=!1)}return d?"helper":e?"ambiguous":"simple"},pushParams:function(a){for(var b=0,c=a.length;b<c;b++)this.pushParam(a[b])},pushParam:function(a){var b=null!=a.value?a.value:a.original||"";if(this.stringParams)b.replace&&(b=b.replace(/^(\.?\.\/)*/g,"").replace(/\//g,".")),a.depth&&this.addDepth(a.depth),this.opcode("getContext",a.depth||0),this.opcode("pushStringParam",b,a.type),"SubExpression"===a.type&&this.accept(a);else{if(this.trackIds){var c=void 0;if(!a.parts||n["default"].helpers.scopedId(a)||a.depth||(c=this.blockParamIndex(a.parts[0])),c){var d=a.parts.slice(1).join(".");this.opcode("pushId","BlockParam",c,d)}else b=a.original||b,b.replace&&(b=b.replace(/^this(?:\.|$)/,"").replace(/^\.\//,"").replace(/^\.$/,"")),this.opcode("pushId",a.type,b)}this.accept(a)}},setupFullMustacheParams:function(a,b,c,d){var e=a.params;return this.pushParams(e),this.opcode("pushProgram",b),this.opcode("pushProgram",c),a.hash?this.accept(a.hash):this.opcode("emptyHash",d),e},blockParamIndex:function(a){for(var b=0,c=this.options.blockParams.length;b<c;b++){var d=this.options.blockParams[b],e=d&&l.indexOf(d,a);if(d&&e>=0)return[b,e]}}}},function(a,b,c){"use strict";function d(a){this.value=a}function e(){}function f(a,b,c,d){var e=b.popStack(),f=0,g=c.length;for(a&&g--;f<g;f++)e=b.nameLookup(e,c[f],d);return a?[b.aliasable("container.strict"),"(",e,", ",b.quotedString(c[f]),")"]:e}var g=c(1)["default"];b.__esModule=!0;var h=c(4),i=c(6),j=g(i),k=c(5),l=c(43),m=g(l);e.prototype={nameLookup:function(a,b){return e.isValidJavaScriptVariableName(b)?[a,".",b]:[a,"[",JSON.stringify(b),"]"]},depthedLookup:function(a){return[this.aliasable("container.lookup"),'(depths, "',a,'")']},compilerInfo:function(){var a=h.COMPILER_REVISION,b=h.REVISION_CHANGES[a];return[a,b]},appendToBuffer:function(a,b,c){return k.isArray(a)||(a=[a]),a=this.source.wrap(a,b),this.environment.isSimple?["return ",a,";"]:c?["buffer += ",a,";"]:(a.appendToBuffer=!0,a)},initializeBuffer:function(){return this.quotedString("")},compile:function(a,b,c,d){this.environment=a,this.options=b,this.stringParams=this.options.stringParams,this.trackIds=this.options.trackIds,this.precompile=!d,this.name=this.environment.name,this.isChild=!!c,this.context=c||{decorators:[],programs:[],environments:[]},this.preamble(),this.stackSlot=0,this.stackVars=[],this.aliases={},this.registers={list:[]},this.hashes=[],this.compileStack=[],this.inlineStack=[],this.blockParams=[],this.compileChildren(a,b),this.useDepths=this.useDepths||a.useDepths||a.useDecorators||this.options.compat,this.useBlockParams=this.useBlockParams||a.useBlockParams;var e=a.opcodes,f=void 0,g=void 0,h=void 0,i=void 0;for(h=0,i=e.length;h<i;h++)f=e[h],this.source.currentLocation=f.loc,g=g||f.loc,this[f.opcode].apply(this,f.args);if(this.source.currentLocation=g,this.pushSource(""),this.stackSlot||this.inlineStack.length||this.compileStack.length)throw new j["default"]("Compile completed with content left on stack");this.decorators.isEmpty()?this.decorators=void 0:(this.useDecorators=!0,this.decorators.prepend("var decorators = container.decorators;\n"),this.decorators.push("return fn;"),d?this.decorators=Function.apply(this,["fn","props","container","depth0","data","blockParams","depths",this.decorators.merge()]):(this.decorators.prepend("function(fn, props, container, depth0, data, blockParams, depths) {\n"),this.decorators.push("}\n"),this.decorators=this.decorators.merge()));var k=this.createFunctionContext(d);if(this.isChild)return k;var l={compiler:this.compilerInfo(),main:k};this.decorators&&(l.main_d=this.decorators,l.useDecorators=!0);var m=this.context,n=m.programs,o=m.decorators;for(h=0,i=n.length;h<i;h++)n[h]&&(l[h]=n[h],o[h]&&(l[h+"_d"]=o[h],l.useDecorators=!0));return this.environment.usePartial&&(l.usePartial=!0),this.options.data&&(l.useData=!0),this.useDepths&&(l.useDepths=!0),this.useBlockParams&&(l.useBlockParams=!0),this.options.compat&&(l.compat=!0),d?l.compilerOptions=this.options:(l.compiler=JSON.stringify(l.compiler),this.source.currentLocation={start:{line:1,column:0}},l=this.objectLiteral(l),b.srcName?(l=l.toStringWithSourceMap({file:b.destName}),l.map=l.map&&l.map.toString()):l=l.toString()),l},preamble:function(){this.lastContext=0,this.source=new m["default"](this.options.srcName),this.decorators=new m["default"](this.options.srcName)},createFunctionContext:function(a){var b="",c=this.stackVars.concat(this.registers.list);c.length>0&&(b+=", "+c.join(", "));var d=0;for(var e in this.aliases){var f=this.aliases[e];this.aliases.hasOwnProperty(e)&&f.children&&f.referenceCount>1&&(b+=", alias"+ ++d+"="+e,f.children[0]="alias"+d)}var g=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&g.push("blockParams"),this.useDepths&&g.push("depths");var h=this.mergeSource(b);return a?(g.push(h),Function.apply(this,g)):this.source.wrap(["function(",g.join(","),") {\n ",h,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend(" + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},blockValue:function(a){var b=this.aliasable("helpers.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("helpers.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c,d){var e=0;d||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[e++])),this.resolvePath("context",a,e,b,c)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b,c){a?this.pushStackLiteral("container.data(data, "+a+")"):this.pushStackLiteral("data"),this.resolvePath("data",b,0,!0,c)},resolvePath:function(a,b,c,d,e){var g=this;if(this.options.strict||this.options.assumeObjects)return void this.push(f(this.options.strict&&e,this,b,a));for(var h=b.length;c<h;c++)this.replaceStack(function(e){
29
  var f=g.nameLookup(e,b[c],a);return d?[" && ",f]:[" != null ? ",f," : ",e]})},resolvePossibleLambda:function(){this.push([this.aliasable("container.lambda"),"(",this.popStack(),", ",this.contextName(0),")"])},pushStringParam:function(a,b){this.pushContext(),this.pushString(b),"SubExpression"!==b&&("string"==typeof a?this.pushString(a):this.pushStackLiteral(a))},emptyHash:function(a){this.trackIds&&this.push("{}"),this.stringParams&&(this.push("{}"),this.push("{}")),this.pushStackLiteral(a?"undefined":"{}")},pushHash:function(){this.hash&&this.hashes.push(this.hash),this.hash={values:[],types:[],contexts:[],ids:[]}},popHash:function(){var a=this.hash;this.hash=this.hashes.pop(),this.trackIds&&this.push(this.objectLiteral(a.ids)),this.stringParams&&(this.push(this.objectLiteral(a.contexts)),this.push(this.objectLiteral(a.types))),this.push(this.objectLiteral(a.values))},pushString:function(a){this.pushStackLiteral(this.quotedString(a))},pushLiteral:function(a){this.pushStackLiteral(a)},pushProgram:function(a){null!=a?this.pushStackLiteral(this.programExpression(a)):this.pushStackLiteral(null)},registerDecorator:function(a,b){var c=this.nameLookup("decorators",b,"decorator"),d=this.setupHelperArgs(b,a);this.decorators.push(["fn = ",this.decorators.functionCall(c,"",["fn","props","container",d])," || fn;"])},invokeHelper:function(a,b,c){var d=this.popStack(),e=this.setupHelper(a,b),f=c?[e.name," || "]:"",g=["("].concat(f,d);this.options.strict||g.push(" || ",this.aliasable("helpers.helperMissing")),g.push(")"),this.push(this.source.functionCall(g,"call",e.callParams))},invokeKnownHelper:function(a,b){var c=this.setupHelper(a,b);this.push(this.source.functionCall(c.name,"call",c.callParams))},invokeAmbiguous:function(a,b){this.useRegister("helper");var c=this.popStack();this.emptyHash();var d=this.setupHelper(0,a,b),e=this.lastHelper=this.nameLookup("helpers",a,"helper"),f=["(","(helper = ",e," || ",c,")"];this.options.strict||(f[0]="(helper = ",f.push(" != null ? helper : ",this.aliasable("helpers.helperMissing"))),this.push(["(",f,d.paramsInit?["),(",d.paramsInit]:[],"),","(typeof helper === ",this.aliasable('"function"')," ? ",this.source.functionCall("helper","call",d.callParams)," : helper))"])},invokePartial:function(a,b,c){var d=[],e=this.setupParams(b,1,d);a&&(b=this.popStack(),delete e.name),c&&(e.indent=JSON.stringify(c)),e.helpers="helpers",e.partials="partials",e.decorators="container.decorators",a?d.unshift(b):d.unshift(this.nameLookup("partials",b,"partial")),this.options.compat&&(e.depths="depths"),e=this.objectLiteral(e),d.push(e),this.push(this.source.functionCall("container.invokePartial","",d))},assignToHash:function(a){var b=this.popStack(),c=void 0,d=void 0,e=void 0;this.trackIds&&(e=this.popStack()),this.stringParams&&(d=this.popStack(),c=this.popStack());var f=this.hash;c&&(f.contexts[a]=c),d&&(f.types[a]=d),e&&(f.ids[a]=e),f.values[a]=b},pushId:function(a,b,c){"BlockParam"===a?this.pushStackLiteral("blockParams["+b[0]+"].path["+b[1]+"]"+(c?" + "+JSON.stringify("."+c):"")):"PathExpression"===a?this.pushString(b):"SubExpression"===a?this.pushStackLiteral("true"):this.pushStackLiteral("null")},compiler:e,compileChildren:function(a,b){for(var c=a.children,d=void 0,e=void 0,f=0,g=c.length;f<g;f++){d=c[f],e=new this.compiler;var h=this.matchExistingProgram(d);if(null==h){this.context.programs.push("");var i=this.context.programs.length;d.index=i,d.name="program"+i,this.context.programs[i]=e.compile(d,b,this.context,!this.precompile),this.context.decorators[i]=e.decorators,this.context.environments[i]=d,this.useDepths=this.useDepths||e.useDepths,this.useBlockParams=this.useBlockParams||e.useBlockParams,d.useDepths=this.useDepths,d.useBlockParams=this.useBlockParams}else d.index=h.index,d.name="program"+h.index,this.useDepths=this.useDepths||h.useDepths,this.useBlockParams=this.useBlockParams||h.useBlockParams}},matchExistingProgram:function(a){for(var b=0,c=this.context.environments.length;b<c;b++){var d=this.context.environments[b];if(d&&d.equals(a))return d}},programExpression:function(a){var b=this.environment.children[a],c=[b.index,"data",b.blockParams];return(this.useBlockParams||this.useDepths)&&c.push("blockParams"),this.useDepths&&c.push("depths"),"container.program("+c.join(", ")+")"},useRegister:function(a){this.registers[a]||(this.registers[a]=!0,this.registers.list.push(a))},push:function(a){return a instanceof d||(a=this.source.wrap(a)),this.inlineStack.push(a),a},pushStackLiteral:function(a){this.push(new d(a))},pushSource:function(a){this.pendingContent&&(this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent),this.pendingLocation)),this.pendingContent=void 0),a&&this.source.push(a)},replaceStack:function(a){var b=["("],c=void 0,e=void 0,f=void 0;if(!this.isInline())throw new j["default"]("replaceStack on non-inline");var g=this.popStack(!0);if(g instanceof d)c=[g.value],b=["(",c],f=!0;else{e=!0;var h=this.incrStack();b=["((",this.push(h)," = ",g,")"],c=this.topStack()}var i=a.call(this,c);f||this.popStack(),e&&this.stackSlot--,this.push(b.concat(i,")"))},incrStack:function(){return this.stackSlot++,this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;b<c;b++){var e=a[b];if(e instanceof d)this.compileStack.push(e);else{var f=this.incrStack();this.pushSource([f," = ",e,";"]),this.compileStack.push(f)}}},isInline:function(){return this.inlineStack.length},popStack:function(a){var b=this.isInline(),c=(b?this.inlineStack:this.compileStack).pop();if(!a&&c instanceof d)return c.value;if(!b){if(!this.stackSlot)throw new j["default"]("Invalid stack pop");this.stackSlot--}return c},topStack:function(){var a=this.isInline()?this.inlineStack:this.compileStack,b=a[a.length-1];return b instanceof d?b.value:b},contextName:function(a){return this.useDepths&&a?"depths["+a+"]":"depth"+a},quotedString:function(a){return this.source.quotedString(a)},objectLiteral:function(a){return this.source.objectLiteral(a)},aliasable:function(a){var b=this.aliases[a];return b?(b.referenceCount++,b):(b=this.aliases[a]=this.source.wrap(a),b.aliasable=!0,b.referenceCount=1,b)},setupHelper:function(a,b,c){var d=[],e=this.setupHelperArgs(b,a,d,c),f=this.nameLookup("helpers",b,"helper"),g=this.aliasable(this.contextName(0)+" != null ? "+this.contextName(0)+" : (container.nullContext || {})");return{params:d,paramsInit:e,name:f,callParams:[g].concat(d)}},setupParams:function(a,b,c){var d={},e=[],f=[],g=[],h=!c,i=void 0;h&&(c=[]),d.name=this.quotedString(a),d.hash=this.popStack(),this.trackIds&&(d.hashIds=this.popStack()),this.stringParams&&(d.hashTypes=this.popStack(),d.hashContexts=this.popStack());var j=this.popStack(),k=this.popStack();(k||j)&&(d.fn=k||"container.noop",d.inverse=j||"container.noop");for(var l=b;l--;)i=this.popStack(),c[l]=i,this.trackIds&&(g[l]=this.popStack()),this.stringParams&&(f[l]=this.popStack(),e[l]=this.popStack());return h&&(d.args=this.source.generateArray(c)),this.trackIds&&(d.ids=this.source.generateArray(g)),this.stringParams&&(d.types=this.source.generateArray(f),d.contexts=this.source.generateArray(e)),this.options.data&&(d.data="data"),this.useBlockParams&&(d.blockParams="blockParams"),d},setupHelperArgs:function(a,b,c,d){var e=this.setupParams(a,b,c);return e=this.objectLiteral(e),d?(this.useRegister("options"),c.push("options"),["options=",e]):c?(c.push(e),""):e}},function(){for(var a="break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield await null true false".split(" "),b=e.RESERVED_WORDS={},c=0,d=a.length;c<d;c++)b[a[c]]=!0}(),e.isValidJavaScriptVariableName=function(a){return!e.RESERVED_WORDS[a]&&/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(a)},b["default"]=e,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b,c){if(f.isArray(a)){for(var d=[],e=0,g=a.length;e<g;e++)d.push(b.wrap(a[e],c));return d}return"boolean"==typeof a||"number"==typeof a?a+"":a}function e(a){this.srcFile=a,this.source=[]}b.__esModule=!0;var f=c(5),g=void 0;try{}catch(h){}g||(g=function(a,b,c,d){this.src="",d&&this.add(d)},g.prototype={add:function(a){f.isArray(a)&&(a=a.join("")),this.src+=a},prepend:function(a){f.isArray(a)&&(a=a.join("")),this.src=a+this.src},toStringWithSourceMap:function(){return{code:this.toString()}},toString:function(){return this.src}}),e.prototype={isEmpty:function(){return!this.source.length},prepend:function(a,b){this.source.unshift(this.wrap(a,b))},push:function(a,b){this.source.push(this.wrap(a,b))},merge:function(){var a=this.empty();return this.each(function(b){a.add([" ",b,"\n"])}),a},each:function(a){for(var b=0,c=this.source.length;b<c;b++)a(this.source[b])},empty:function(){var a=this.currentLocation||{start:{}};return new g(a.start.line,a.start.column,this.srcFile)},wrap:function(a){var b=arguments.length<=1||void 0===arguments[1]?this.currentLocation||{start:{}}:arguments[1];return a instanceof g?a:(a=d(a,this,b),new g(b.start.line,b.start.column,this.srcFile,a))},functionCall:function(a,b,c){return c=this.generateList(c),this.wrap([a,b?"."+b+"(":"(",c,")"])},quotedString:function(a){return'"'+(a+"").replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")+'"'},objectLiteral:function(a){var b=[];for(var c in a)if(a.hasOwnProperty(c)){var e=d(a[c],this);"undefined"!==e&&b.push([this.quotedString(c),":",e])}var f=this.generateList(b);return f.prepend("{"),f.add("}"),f},generateList:function(a){for(var b=this.empty(),c=0,e=a.length;c<e;c++)c&&b.add(","),b.add(d(a[c],this));return b},generateArray:function(a){var b=this.generateList(a);return b.prepend("["),b.add("]"),b}},b["default"]=e,a.exports=b["default"]}])});
assets/js/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  //silent
1
+ <?php
2
  //silent
assets/js/jquery.qtip/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  //silent
1
+ <?php
2
  //silent
assets/js/jquery.qtip/jquery.qtip.min.js CHANGED
@@ -1,5 +1,5 @@
1
- /* qTip2 v2.2.1 | Plugins: tips modal viewport svg imagemap ie6 | Styles: core basic css3 | qtip2.com | Licensed MIT | Sat Sep 06 2014 23:12:07 */
2
-
3
- !function(a,b,c){!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)}(function(d){"use strict";function e(a,b,c,e){this.id=c,this.target=a,this.tooltip=F,this.elements={target:a},this._id=S+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:E,attr:e,onTooltip:E,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=E}function f(a){return a===F||"object"!==d.type(a)}function g(a){return!(d.isFunction(a)||a&&a.attr||a.length||"object"===d.type(a)&&(a.jquery||a.then))}function h(a){var b,c,e,h;return f(a)?E:(f(a.metadata)&&(a.metadata={type:a.metadata}),"content"in a&&(b=a.content,f(b)||b.jquery||b.done?b=a.content={text:c=g(b)?E:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==E,delete b.ajax,b.text=function(a,b){var f=c||d(this).attr(b.options.content.attr)||"Loading...",g=d.ajax(d.extend({},e,{context:b})).then(e.success,F,e.error).then(function(a){return a&&h&&b.set("content.text",a),a},function(a,c,d){b.destroyed||0===a.status||b.set("content.text",c+": "+d)});return h?f:(b.set("content.text",f),g)}),"title"in b&&(d.isPlainObject(b.title)&&(b.button=b.title.button,b.title=b.title.text),g(b.title||E)&&(b.title=E))),"position"in a&&f(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&f(a.show)&&(a.show=a.show.jquery?{target:a.show}:a.show===D?{ready:D}:{event:a.show}),"hide"in a&&f(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&f(a.style)&&(a.style={classes:a.style}),d.each(R,function(){this.sanitize&&this.sanitize(a)}),a)}function i(a,b){for(var c,d=0,e=a,f=b.split(".");e=e[f[d++]];)d<f.length&&(c=e);return[c||a,f.pop()]}function j(a,b){var c,d,e;for(c in this.checks)for(d in this.checks[c])(e=new RegExp(d,"i").exec(a))&&(b.push(e),("builtin"===c||this.plugins[c])&&this.checks[c][d].apply(this.plugins[c]||this,b))}function k(a){return V.concat("").join(a?"-"+a+" ":" ")}function l(a,b){return b>0?setTimeout(d.proxy(a,this),b):void a.call(this)}function m(a){this.tooltip.hasClass(ab)||(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=l.call(this,function(){this.toggle(D,a)},this.options.show.delay))}function n(a){if(!this.tooltip.hasClass(ab)&&!this.destroyed){var b=d(a.relatedTarget),c=b.closest(W)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=l.call(this,function(){this.toggle(E,a)},this.options.hide.delay,this)}}function o(a){!this.tooltip.hasClass(ab)&&this.options.hide.inactive&&(clearTimeout(this.timers.inactive),this.timers.inactive=l.call(this,function(){this.hide(a)},this.options.hide.inactive))}function p(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function q(a,c,e){d(b.body).delegate(a,(c.split?c:c.join("."+S+" "))+"."+S,function(){var a=y.api[d.attr(this,U)];a&&!a.disabled&&e.apply(a,arguments)})}function r(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):F,p="html5"===f.metadata.type&&o?o[f.metadata.name]:F,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(D,{},y.defaults,f,"object"==typeof q?h(q):F,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===E||!j)return E;k.content.text=j}if(i.container.length||(i.container=m),i.target===E&&(i.target=n),k.show.target===E&&(k.show.target=n),k.show.solo===D&&(k.show.solo=i.container.closest("body")),k.hide.target===E&&(k.hide.target=n),k.position.viewport===D&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new A(i.at,D),i.my=new A(i.my),a.data(S))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===E)return E;return a.attr(T,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(cb,l).attr("title",""),g=new e(a,k,c,!!j),a.data(S,g),g}function s(a){return a.charAt(0).toUpperCase()+a.slice(1)}function t(a,b){var d,e,f=b.charAt(0).toUpperCase()+b.slice(1),g=(b+" "+rb.join(f+" ")+f).split(" "),h=0;if(qb[b])return a.css(qb[b]);for(;d=g[h++];)if((e=a.css(d))!==c)return qb[b]=d,e}function u(a,b){return Math.ceil(parseFloat(t(a,b)))}function v(a,b){this._ns="tip",this.options=b,this.offset=b.offset,this.size=[b.width,b.height],this.init(this.qtip=a)}function w(a,b){this.options=b,this._ns="-modal",this.init(this.qtip=a)}function x(a){this._ns="ie6",this.init(this.qtip=a)}var y,z,A,B,C,D=!0,E=!1,F=null,G="x",H="y",I="width",J="height",K="top",L="left",M="bottom",N="right",O="center",P="flipinvert",Q="shift",R={},S="qtip",T="data-hasqtip",U="data-qtip-id",V=["ui-widget","ui-tooltip"],W="."+S,X="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),Y=S+"-fixed",Z=S+"-default",$=S+"-focus",_=S+"-hover",ab=S+"-disabled",bb="_replacedByqTip",cb="oldtitle",db={ie:function(){for(var a=4,c=b.createElement("div");(c.innerHTML="<!--[if gt IE "+a+"]><i></i><![endif]-->")&&c.getElementsByTagName("i")[0];a+=1);return a>4?a:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||E};z=e.prototype,z._when=function(a){return d.when.apply(d,a)},z.render=function(a){if(this.rendered||this.destroyed)return this;var b,c=this,e=this.options,f=this.cache,g=this.elements,h=e.content.text,i=e.content.title,j=e.content.button,k=e.position,l=("."+this._id+" ",[]);return d.attr(this.target[0],"aria-describedby",this._id),f.posClass=this._createPosClass((this.position={my:k.my,at:k.at}).my),this.tooltip=g.tooltip=b=d("<div/>",{id:this._id,"class":[S,Z,e.style.classes,f.posClass].join(" "),width:e.style.width||"",height:e.style.height||"",tracking:"mouse"===k.target&&k.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":E,"aria-describedby":this._id+"-content","aria-hidden":D}).toggleClass(ab,this.disabled).attr(U,this.id).data(S,this).appendTo(k.container).append(g.content=d("<div />",{"class":S+"-content",id:this._id+"-content","aria-atomic":D})),this.rendered=-1,this.positioning=D,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,E))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,E)),this.rendered=D,this._setWidget(),d.each(R,function(a){var b;"render"===this.initialize&&(b=this(c))&&(c.plugins[a]=b)}),this._unassignEvents(),this._assignEvents(),this._when(l).then(function(){c._trigger("render"),c.positioning=E,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(D,f.event,E),c.hiddenDuringWait=E}),y.api[this.id]=this,this},z.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=D;var a,b=this.target,c=b.attr(cb);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()});for(a in this.timers)clearTimeout(this.timers[a]);b.removeData(S).removeAttr(U).removeAttr(T).removeAttr("aria-describedby"),this.options.suppress&&c&&b.attr("title",c).removeAttr(cb),this._unassignEvents(),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=F,delete y.api[this.id]}}return this.destroyed?this.target:(a===D&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},B=z.checks={builtin:{"^id$":function(a,b,c,e){var f=c===D?y.nextid:c,g=S+"-"+f;f!==E&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),void this._updateTitle(c)):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(this.position[b]=a[b]=new A(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(D)||this.toggle(D))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def":function(a,b,c){this.rendered&&this.tooltip.toggleClass(Z,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},z.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var eb=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,fb=/^prerender|show\.ready/i;z.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=E,g=this.options;this.checks}return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&fb.test(b))return void delete a[b];var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.nodeType?d(c):c,f=eb.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=D,d.each(a,d.proxy(j,this)),this.positioning=E,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?F:this.cache.event),this},z._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=D,a.then(function(a){return e.waiting=E,c._update(a,b)},F,function(a){return c._update(a,b)})):a===E||!a&&""!==a?E:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):E},z._waitForContent=function(a){var b=this.cache;return b.waiting=D,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=E}).promise()},z._updateContent=function(a,b){this._update(a,this.elements.content,b)},z._updateTitle=function(a,b){this._update(a,this.elements.title,b)===E&&this._removeTitle(E)},z._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("<div />",{"class":S+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("<div />",{id:b,"class":S+"-title","aria-atomic":D})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},z._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=F,a!==E&&this.reposition())},z._createPosClass=function(a){return S+"-pos-"+(a||this.options.position.my).abbrev()},z.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=D;var f,g,h,i,j=this.cache,k=this.tooltip,l=this.options.position,m=l.target,n=l.my,o=l.at,p=l.viewport,q=l.container,r=l.adjust,s=r.method.split(" "),t=k.outerWidth(E),u=k.outerHeight(E),v=0,w=0,x=k.css("position"),y={left:0,top:0},z=k[0].offsetWidth>0,A=c&&"scroll"===c.type,B=d(a),C=q[0].ownerDocument,F=this.mouse;if(d.isArray(m)&&2===m.length)o={x:L,y:K},y={left:m[0],top:m[1]};else if("mouse"===m)o={x:L,y:K},(!r.mouse||this.options.hide.distance)&&j.origin&&j.origin.pageX?c=j.origin:!c||c&&("resize"===c.type||"scroll"===c.type)?c=j.event:F&&F.pageX&&(c=F),"static"!==x&&(y=q.offset()),C.body.offsetWidth!==(a.innerWidth||C.documentElement.clientWidth)&&(g=d(b.body).offset()),y={left:c.pageX-y.left+(g&&g.left||0),top:c.pageY-y.top+(g&&g.top||0)},r.mouse&&A&&F&&(y.left-=(F.scrollX||0)-B.scrollLeft(),y.top-=(F.scrollY||0)-B.scrollTop());else{if("event"===m?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?j.target=d(c.target):c.target||(j.target=this.elements.target):"event"!==m&&(j.target=d(m.jquery?m:this.elements.target)),m=j.target,m=d(m).eq(0),0===m.length)return this;m[0]===b||m[0]===a?(v=db.iOS?a.innerWidth:m.width(),w=db.iOS?a.innerHeight:m.height(),m[0]===a&&(y={top:(p||m).scrollTop(),left:(p||m).scrollLeft()})):R.imagemap&&m.is("area")?f=R.imagemap(this,m,o,R.viewport?s:E):R.svg&&m&&m[0].ownerSVGElement?f=R.svg(this,m,o,R.viewport?s:E):(v=m.outerWidth(E),w=m.outerHeight(E),y=m.offset()),f&&(v=f.width,w=f.height,g=f.offset,y=f.position),y=this.reposition.offset(m,y,q),(db.iOS>3.1&&db.iOS<4.1||db.iOS>=4.3&&db.iOS<4.33||!db.iOS&&"fixed"===x)&&(y.left-=B.scrollLeft(),y.top-=B.scrollTop()),(!f||f&&f.adjustable!==E)&&(y.left+=o.x===N?v:o.x===O?v/2:0,y.top+=o.y===M?w:o.y===O?w/2:0)}return y.left+=r.x+(n.x===N?-t:n.x===O?-t/2:0),y.top+=r.y+(n.y===M?-u:n.y===O?-u/2:0),R.viewport?(h=y.adjusted=R.viewport(this,y,l,v,w,t,u),g&&h.left&&(y.left+=g.left),g&&h.top&&(y.top+=g.top),h.my&&(this.position.my=h.my)):y.adjusted={left:0,top:0},j.posClass!==(i=this._createPosClass(this.position.my))&&k.removeClass(j.posClass).addClass(j.posClass=i),this._trigger("move",[y,p.elem||p],c)?(delete y.adjusted,e===E||!z||isNaN(y.left)||isNaN(y.top)||"mouse"===m||!d.isFunction(l.effect)?k.css(y):d.isFunction(l.effect)&&(l.effect.call(k,this,d.extend({},y)),k.queue(function(a){d(this).css({opacity:"",height:""}),db.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=E,this):this},z.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!db.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||"visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var gb=(A=z.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,O).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?H:G}).prototype;gb.invert=function(a,b){this[a]=this[a]===L?N:this[a]===N?L:b||this[a]},gb.string=function(a){var b=this.x,c=this.y,d=b!==c?"center"===b||"center"!==c&&(this.precedance===H||this.forceY)?[c,b]:[b,c]:[b];return a!==!1?d.join(" "):d},gb.abbrev=function(){var a=this.string(!1);return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},gb.clone=function(){return new A(this.string(),this.forceY)},z.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&e.event&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).length===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=d.event.fix(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=D),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",l=this.options[k],m=(this.options[a?"hide":"show"],this.options.position),n=this.options.content,o=this.tooltip.css("width"),p=this.tooltip.is(":visible"),q=a||1===l.target.length,r=!c||l.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!p),h=!g.is(":animated")&&p===a&&r,i=h?F:!!this._trigger(k,[90]),this.destroyed?this:(i!==E&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(this.mouse&&(e.origin=d.event.fix(this.mouse)),d.isFunction(n.text)&&this._updateContent(n.text,E),d.isFunction(n.title)&&this._updateTitle(n.title,E),!C&&"mouse"===m.target&&m.adjust.mouse&&(d(b).bind("mousemove."+S,this._storeMouse),C=D),o||g.css("width",g.outerWidth(E)),this.reposition(c,arguments[2]),o||g.css("width",""),l.solo&&("string"==typeof l.solo?d(l.solo):d(W,l.solo)).not(g).not(l.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,C&&!d(W+'[tracking="true"]:visible',l.solo).not(g).length&&(d(b).unbind("mousemove."+S),C=E),this.blur(c)),j=d.proxy(function(){a?(db.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof l.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),l.effect===E||q===E?(g[k](),j()):d.isFunction(l.effect)?(g.stop(1,1),l.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&l.target.trigger("qtip-"+this.id+"-inactive"),this))},z.show=function(a){return this.toggle(D,a)},z.hide=function(a){return this.toggle(E,a)},z.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(W),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=y.zindex+b.length;return c.hasClass($)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+$).qtip("blur",a)),c.addClass($)[0].style.zIndex=f),this},z.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass($),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},z.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(ab):this.disabled):"boolean"!=typeof a&&(a=D),this.rendered&&this.tooltip.toggleClass(ab,a).attr("aria-disabled",a),this.disabled=!!a,this)},z.enable=function(){return this.disable(E)},z._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),b.button=e.jquery?e:d("<a />",{"class":"qtip-close "+(this.options.style.widget?"":S+"-icon"),title:g,"aria-label":g}).prepend(d("<span />",{"class":"ui-icon ui-icon-close",html:"&times;"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(ab)||a.hide(b),E})},z._updateButton=function(a){if(!this.rendered)return E;var b=this.elements.button;a?this._createButton():b.remove()},z._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(ab);c.removeClass(ab),ab=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(ab,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass(Z,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(S+"-icon",!a)},z._storeMouse=function(a){return(this.mouse=d.event.fix(a)).type="mousemove",this},z._bind=function(a,b,c,e,f){if(a&&c&&b.length){var g="."+this._id+(e?"-"+e:"");return d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this)),this}},z._unbind=function(a,b){return a&&d(a).unbind("."+this._id+(b?"-"+b:"")),this},z._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||F,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=E,!e.isDefaultPrevented()},z._bindEvents=function(a,b,c,e,f,g){var h=c.filter(e).add(e.filter(c)),i=[];h.length&&(d.each(b,function(b,c){var e=d.inArray(c,a);e>-1&&i.push(a.splice(e,1)[0])}),i.length&&(this._bind(h,i,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)}),c=c.not(h),e=e.not(h))),this._bind(c,a,f),this._bind(e,b,g)},z._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?E:(this.cache.event=a&&d.event.fix(a),this.cache.target=a&&d(a.target),clearTimeout(this.timers.show),void(this.timers.show=l.call(this,function(){this.render("object"==typeof a||c.show.ready)},c.prerender?0:c.show.delay)))}var c=this.options,e=c.show.target,f=c.hide.target,g=c.show.event?d.trim(""+c.show.event).split(" "):[],h=c.hide.event?d.trim(""+c.hide.event).split(" "):[];this._bind(this.elements.target,["remove","removeqtip"],function(){this.destroy(!0)},"destroy"),/mouse(over|enter)/i.test(c.show.event)&&!/mouse(out|leave)/i.test(c.hide.event)&&h.push("mouseleave"),this._bind(e,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=D}),this._bindEvents(g,h,e,f,b,function(){return this.timers?void clearTimeout(this.timers.show):E}),(c.show.ready||c.prerender)&&b.call(this,a)},z._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),q=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],s=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeName)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(Y)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0,e=b.parents(W).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",o,"inactive"),this._bind(i.add(g),y.inactiveEvents,o)),this._bindEvents(r,s,h,i,m,n),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mouseenter","mouseleave"],function(a){return this.cache?void(this.cache.onTarget="mouseenter"===a.type):E}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:q,"resize",p),f.adjust.scroll&&this._bind(q.add(f.container),"scroll",p)},z._unassignEvents=function(){var c=this.options,e=c.show.target,f=c.hide.target,g=d.grep([this.elements.target[0],this.rendered&&this.tooltip[0],c.position.container[0],c.position.viewport[0],c.position.container.closest("html")[0],a,b],function(a){return"object"==typeof a});e&&e.toArray&&(g=g.concat(e.toArray())),f&&f.toArray&&(g=g.concat(f.toArray())),this._unbind(g)._unbind(g,"destroy")._unbind(g,"inactive")},d(function(){q(W,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(Y)&&!c.hasClass(ab)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.position.adjust.mouse&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(_,b)}),q("["+U+"]",X,o)}),y=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=F,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],S):F;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,S);if(!a)return D;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),E;a.set(b,e)}}),g!==F?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(D,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===E||c.length<1||y.api[c]?y.nextid++:c,b=r(d(this),c,k),b===E?D:(y.api[c]=b,d.each(R,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,y.api={},d.each({attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,cb):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(cb,b))}return d.fn["attr"+bb].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+bb].apply(this,arguments));return a||b.filter("["+cb+"]").attr("title",function(){return d.attr(this,cb)}).removeAttr(cb),b}},function(a,b){if(!b||d.fn[a+bb])return D;var c=d.fn[a+bb]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+bb]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(T))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+bb].apply(this,arguments)}),y.version="2.2.1",y.nextid=0,y.inactiveEvents=X,y.zindex=15e3,y.defaults={prerender:E,id:E,overwrite:D,suppress:D,content:{text:D,attr:"title",title:E,button:E},position:{my:"top left",at:"bottom right",target:E,container:E,viewport:E,adjust:{x:0,y:0,mouse:D,scroll:D,resize:D,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:E})}},show:{target:E,event:"mouseenter",effect:D,delay:90,solo:E,ready:E,autofocus:E},hide:{target:E,event:"mouseleave",effect:D,delay:0,fixed:E,inactive:E,leave:"window",distance:E},style:{classes:"",widget:E,width:E,height:E,def:D},events:{render:F,move:F,show:F,hide:F,toggle:F,visible:F,hidden:F,focus:F,blur:F}};var hb,ib="margin",jb="border",kb="color",lb="background-color",mb="transparent",nb=" !important",ob=!!b.createElement("canvas").getContext,pb=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,qb={},rb=["Webkit","O","Moz","ms"];if(ob)var sb=a.devicePixelRatio||1,tb=function(){var a=b.createElement("canvas").getContext("2d");return a.backingStorePixelRatio||a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||1}(),ub=sb/tb;else var vb=function(a,b,c){return"<qtipvml:"+a+' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" '+(b||"")+' style="behavior: url(#default#VML); '+(c||"")+'" />'};d.extend(v.prototype,{init:function(a){var b,c;c=this.element=a.elements.tip=d("<div />",{"class":S+"-tip"}).prependTo(a.tooltip),ob?(b=d("<canvas />").appendTo(this.element)[0].getContext("2d"),b.lineJoin="miter",b.miterLimit=1e5,b.save()):(b=vb("shape",'coordorigin="0,0"',"position:absolute;"),this.element.html(b+b),a._bind(d("*",c).add(c),["click","mousedown"],function(a){a.stopPropagation()},this._ns)),a._bind(a.tooltip,"tooltipmove",this.reposition,this._ns,this),this.create()},_swapDimensions:function(){this.size[0]=this.options.height,this.size[1]=this.options.width},_resetDimensions:function(){this.size[0]=this.options.width,this.size[1]=this.options.height},_useTitle:function(a){var b=this.qtip.elements.titlebar;return b&&(a.y===K||a.y===O&&this.element.position().top+this.size[1]/2+this.options.offset<b.outerHeight(D))},_parseCorner:function(a){var b=this.qtip.options.position.my;return a===E||b===E?a=E:a===D?a=new A(b.string()):a.string||(a=new A(a),a.fixed=D),a},_parseWidth:function(a,b,c){var d=this.qtip.elements,e=jb+s(b)+"Width";return(c?u(c,e):u(d.content,e)||u(this._useTitle(a)&&d.titlebar||d.content,e)||u(d.tooltip,e))||0},_parseRadius:function(a){var b=this.qtip.elements,c=jb+s(a.y)+s(a.x)+"Radius";return db.ie<9?0:u(this._useTitle(a)&&b.titlebar||b.content,c)||u(b.tooltip,c)||0},_invalidColour:function(a,b,c){var d=a.css(b);return!d||c&&d===a.css(c)||pb.test(d)?E:d},_parseColours:function(a){var b=this.qtip.elements,c=this.element.css("cssText",""),e=jb+s(a[a.precedance])+s(kb),f=this._useTitle(a)&&b.titlebar||b.content,g=this._invalidColour,h=[];return h[0]=g(c,lb)||g(f,lb)||g(b.content,lb)||g(b.tooltip,lb)||c.css(lb),h[1]=g(c,e,kb)||g(f,e,kb)||g(b.content,e,kb)||g(b.tooltip,e,kb)||b.tooltip.css(e),d("*",c).add(c).css("cssText",lb+":"+mb+nb+";"+jb+":0"+nb+";"),h},_calculateSize:function(a){var b,c,d,e=a.precedance===H,f=this.options.width,g=this.options.height,h="c"===a.abbrev(),i=(e?f:g)*(h?.5:1),j=Math.pow,k=Math.round,l=Math.sqrt(j(i,2)+j(g,2)),m=[this.border/i*l,this.border/g*l];return m[2]=Math.sqrt(j(m[0],2)-j(this.border,2)),m[3]=Math.sqrt(j(m[1],2)-j(this.border,2)),b=l+m[2]+m[3]+(h?0:m[0]),c=b/l,d=[k(c*f),k(c*g)],e?d:d.reverse()},_calculateTip:function(a,b,c){c=c||1,b=b||this.size;var d=b[0]*c,e=b[1]*c,f=Math.ceil(d/2),g=Math.ceil(e/2),h={br:[0,0,d,e,d,0],bl:[0,0,d,0,0,e],tr:[0,e,d,0,d,e],tl:[0,0,0,e,d,e],tc:[0,e,f,0,d,e],bc:[0,0,d,0,f,e],rc:[0,0,d,g,0,e],lc:[d,0,d,e,0,g]};return h.lt=h.br,h.rt=h.bl,h.lb=h.tr,h.rb=h.tl,h[a.abbrev()]},_drawCoords:function(a,b){a.beginPath(),a.moveTo(b[0],b[1]),a.lineTo(b[2],b[3]),a.lineTo(b[4],b[5]),a.closePath()},create:function(){var a=this.corner=(ob||db.ie)&&this._parseCorner(this.options.corner);return(this.enabled=!!this.corner&&"c"!==this.corner.abbrev())&&(this.qtip.cache.corner=a.clone(),this.update()),this.element.toggle(this.enabled),this.corner},update:function(b,c){if(!this.enabled)return this;var e,f,g,h,i,j,k,l,m=this.qtip.elements,n=this.element,o=n.children(),p=this.options,q=this.size,r=p.mimic,s=Math.round;b||(b=this.qtip.cache.corner||this.corner),r===E?r=b:(r=new A(r),r.precedance=b.precedance,"inherit"===r.x?r.x=b.x:"inherit"===r.y?r.y=b.y:r.x===r.y&&(r[b.precedance]=b[b.precedance])),f=r.precedance,b.precedance===G?this._swapDimensions():this._resetDimensions(),e=this.color=this._parseColours(b),e[1]!==mb?(l=this.border=this._parseWidth(b,b[b.precedance]),p.border&&1>l&&!pb.test(e[1])&&(e[0]=e[1]),this.border=l=p.border!==D?p.border:l):this.border=l=0,k=this.size=this._calculateSize(b),n.css({width:k[0],height:k[1],lineHeight:k[1]+"px"}),j=b.precedance===H?[s(r.x===L?l:r.x===N?k[0]-q[0]-l:(k[0]-q[0])/2),s(r.y===K?k[1]-q[1]:0)]:[s(r.x===L?k[0]-q[0]:0),s(r.y===K?l:r.y===M?k[1]-q[1]-l:(k[1]-q[1])/2)],ob?(g=o[0].getContext("2d"),g.restore(),g.save(),g.clearRect(0,0,6e3,6e3),h=this._calculateTip(r,q,ub),i=this._calculateTip(r,this.size,ub),o.attr(I,k[0]*ub).attr(J,k[1]*ub),o.css(I,k[0]).css(J,k[1]),this._drawCoords(g,i),g.fillStyle=e[1],g.fill(),g.translate(j[0]*ub,j[1]*ub),this._drawCoords(g,h),g.fillStyle=e[0],g.fill()):(h=this._calculateTip(r),h="m"+h[0]+","+h[1]+" l"+h[2]+","+h[3]+" "+h[4]+","+h[5]+" xe",j[2]=l&&/^(r|b)/i.test(b.string())?8===db.ie?2:1:0,o.css({coordsize:k[0]+l+" "+(k[1]+l),antialias:""+(r.string().indexOf(O)>-1),left:j[0]-j[2]*Number(f===G),top:j[1]-j[2]*Number(f===H),width:k[0]+l,height:k[1]+l}).each(function(a){var b=d(this);b[b.prop?"prop":"attr"]({coordsize:k[0]+l+" "+(k[1]+l),path:h,fillcolor:e[0],filled:!!a,stroked:!a}).toggle(!(!l&&!a)),!a&&b.html(vb("stroke",'weight="'+2*l+'px" color="'+e[1]+'" miterlimit="1000" joinstyle="miter"'))})),a.opera&&setTimeout(function(){m.tip.css({display:"inline-block",visibility:"visible"})},1),c!==E&&this.calculate(b,k)},calculate:function(a,b){if(!this.enabled)return E;var c,e,f=this,g=this.qtip.elements,h=this.element,i=this.options.offset,j=(g.tooltip.hasClass("ui-widget"),{});return a=a||this.corner,c=a.precedance,b=b||this._calculateSize(a),e=[a.x,a.y],c===G&&e.reverse(),d.each(e,function(d,e){var h,k,l;
4
- e===O?(h=c===H?L:K,j[h]="50%",j[ib+"-"+h]=-Math.round(b[c===H?0:1]/2)+i):(h=f._parseWidth(a,e,g.tooltip),k=f._parseWidth(a,e,g.content),l=f._parseRadius(a),j[e]=Math.max(-f.border,d?k:i+(l>h?l:-h)))}),j[a[c]]-=b[c===G?0:1],h.css({margin:"",top:"",bottom:"",left:"",right:""}).css(j),j},reposition:function(a,b,d){function e(a,b,c,d,e){a===Q&&j.precedance===b&&k[d]&&j[c]!==O?j.precedance=j.precedance===G?H:G:a!==Q&&k[d]&&(j[b]=j[b]===O?k[d]>0?d:e:j[b]===d?e:d)}function f(a,b,e){j[a]===O?p[ib+"-"+b]=o[a]=g[ib+"-"+b]-k[b]:(h=g[e]!==c?[k[b],-g[b]]:[-k[b],g[b]],(o[a]=Math.max(h[0],h[1]))>h[0]&&(d[b]-=k[b],o[b]=E),p[g[e]!==c?e:b]=o[a])}if(this.enabled){var g,h,i=b.cache,j=this.corner.clone(),k=d.adjusted,l=b.options.position.adjust.method.split(" "),m=l[0],n=l[1]||l[0],o={left:E,top:E,x:0,y:0},p={};this.corner.fixed!==D&&(e(m,G,H,L,N),e(n,H,G,K,M),(j.string()!==i.corner.string()||i.cornerTop!==k.top||i.cornerLeft!==k.left)&&this.update(j,E)),g=this.calculate(j),g.right!==c&&(g.left=-g.right),g.bottom!==c&&(g.top=-g.bottom),g.user=this.offset,(o.left=m===Q&&!!k.left)&&f(G,L,N),(o.top=n===Q&&!!k.top)&&f(H,K,M),this.element.css(p).toggle(!(o.x&&o.y||j.x===O&&o.y||j.y===O&&o.x)),d.left-=g.left.charAt?g.user:m!==Q||o.top||!o.left&&!o.top?g.left+this.border:0,d.top-=g.top.charAt?g.user:n!==Q||o.left||!o.left&&!o.top?g.top+this.border:0,i.cornerLeft=k.left,i.cornerTop=k.top,i.corner=j.clone()}},destroy:function(){this.qtip._unbind(this.qtip.tooltip,this._ns),this.qtip.elements.tip&&this.qtip.elements.tip.find("*").remove().end().remove()}}),hb=R.tip=function(a){return new v(a,a.options.style.tip)},hb.initialize="render",hb.sanitize=function(a){if(a.style&&"tip"in a.style){var b=a.style.tip;"object"!=typeof b&&(b=a.style.tip={corner:b}),/string|boolean/i.test(typeof b.corner)||(b.corner=D)}},B.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){this.create(),this.qtip.reposition()},"^style.tip.(height|width)$":function(a){this.size=[a.width,a.height],this.update(),this.qtip.reposition()},"^content.title|style.(classes|widget)$":function(){this.update()}},d.extend(D,y.defaults,{style:{tip:{corner:D,mimic:E,width:6,height:6,border:D,offset:0}}});var wb,xb,yb="qtip-modal",zb="."+yb;xb=function(){function a(a){if(d.expr[":"].focusable)return d.expr[":"].focusable;var b,c,e,f=!isNaN(d.attr(a,"tabindex")),g=a.nodeName&&a.nodeName.toLowerCase();return"area"===g?(b=a.parentNode,c=b.name,a.href&&c&&"map"===b.nodeName.toLowerCase()?(e=d("img[usemap=#"+c+"]")[0],!!e&&e.is(":visible")):!1):/input|select|textarea|button|object/.test(g)?!a.disabled:"a"===g?a.href||f:f}function c(a){k.length<1&&a.length?a.not("body").blur():k.first().focus()}function e(a){if(i.is(":visible")){var b,e=d(a.target),h=f.tooltip,j=e.closest(W);b=j.length<1?E:parseInt(j[0].style.zIndex,10)>parseInt(h[0].style.zIndex,10),b||e.closest(W)[0]===h[0]||c(e),g=a.target===k[k.length-1]}}var f,g,h,i,j=this,k={};d.extend(j,{init:function(){return i=j.elem=d("<div />",{id:"qtip-overlay",html:"<div></div>",mousedown:function(){return E}}).hide(),d(b.body).bind("focusin"+zb,e),d(b).bind("keydown"+zb,function(a){f&&f.options.show.modal.escape&&27===a.keyCode&&f.hide(a)}),i.bind("click"+zb,function(a){f&&f.options.show.modal.blur&&f.hide(a)}),j},update:function(b){f=b,k=b.options.show.modal.stealfocus!==E?b.tooltip.find("*").filter(function(){return a(this)}):[]},toggle:function(a,e,g){var k=(d(b.body),a.tooltip),l=a.options.show.modal,m=l.effect,n=e?"show":"hide",o=i.is(":visible"),p=d(zb).filter(":visible:not(:animated)").not(k);return j.update(a),e&&l.stealfocus!==E&&c(d(":focus")),i.toggleClass("blurs",l.blur),e&&i.appendTo(b.body),i.is(":animated")&&o===e&&h!==E||!e&&p.length?j:(i.stop(D,E),d.isFunction(m)?m.call(i,e):m===E?i[n]():i.fadeTo(parseInt(g,10)||90,e?1:0,function(){e||i.hide()}),e||i.queue(function(a){i.css({left:"",top:""}),d(zb).length||i.detach(),a()}),h=e,f.destroyed&&(f=F),j)}}),j.init()},xb=new xb,d.extend(w.prototype,{init:function(a){var b=a.tooltip;return this.options.on?(a.elements.overlay=xb.elem,b.addClass(yb).css("z-index",y.modal_zindex+d(zb).length),a._bind(b,["tooltipshow","tooltiphide"],function(a,c,e){var f=a.originalEvent;if(a.target===b[0])if(f&&"tooltiphide"===a.type&&/mouse(leave|enter)/.test(f.type)&&d(f.relatedTarget).closest(xb.elem[0]).length)try{a.preventDefault()}catch(g){}else(!f||f&&"tooltipsolo"!==f.type)&&this.toggle(a,"tooltipshow"===a.type,e)},this._ns,this),a._bind(b,"tooltipfocus",function(a,c){if(!a.isDefaultPrevented()&&a.target===b[0]){var e=d(zb),f=y.modal_zindex+e.length,g=parseInt(b[0].style.zIndex,10);xb.elem[0].style.zIndex=f-1,e.each(function(){this.style.zIndex>g&&(this.style.zIndex-=1)}),e.filter("."+$).qtip("blur",a.originalEvent),b.addClass($)[0].style.zIndex=f,xb.update(c);try{a.preventDefault()}catch(h){}}},this._ns,this),void a._bind(b,"tooltiphide",function(a){a.target===b[0]&&d(zb).filter(":visible").not(b).last().qtip("focus",a)},this._ns,this)):this},toggle:function(a,b,c){return a&&a.isDefaultPrevented()?this:void xb.toggle(this.qtip,!!b,c)},destroy:function(){this.qtip.tooltip.removeClass(yb),this.qtip._unbind(this.qtip.tooltip,this._ns),xb.toggle(this.qtip,E),delete this.qtip.elements.overlay}}),wb=R.modal=function(a){return new w(a,a.options.show.modal)},wb.sanitize=function(a){a.show&&("object"!=typeof a.show.modal?a.show.modal={on:!!a.show.modal}:"undefined"==typeof a.show.modal.on&&(a.show.modal.on=D))},y.modal_zindex=y.zindex-200,wb.initialize="render",B.modal={"^show.modal.(on|blur)$":function(){this.destroy(),this.init(),this.qtip.elems.overlay.toggle(this.qtip.tooltip[0].offsetWidth>0)}},d.extend(D,y.defaults,{show:{modal:{on:E,effect:D,blur:D,stealfocus:D,escape:D}}}),R.viewport=function(c,d,e,f,g,h,i){function j(a,b,c,e,f,g,h,i,j){var k=d[f],s=u[a],t=v[a],w=c===Q,x=s===f?j:s===g?-j:-j/2,y=t===f?i:t===g?-i:-i/2,z=q[f]+r[f]-(n?0:m[f]),A=z-k,B=k+j-(h===I?o:p)-z,C=x-(u.precedance===a||s===u[b]?y:0)-(t===O?i/2:0);return w?(C=(s===f?1:-1)*x,d[f]+=A>0?A:B>0?-B:0,d[f]=Math.max(-m[f]+r[f],k-C,Math.min(Math.max(-m[f]+r[f]+(h===I?o:p),k+C),d[f],"center"===s?k-x:1e9))):(e*=c===P?2:0,A>0&&(s!==f||B>0)?(d[f]-=C+e,l.invert(a,f)):B>0&&(s!==g||A>0)&&(d[f]-=(s===O?-C:C)+e,l.invert(a,g)),d[f]<q&&-d[f]>B&&(d[f]=k,l=u.clone())),d[f]-k}var k,l,m,n,o,p,q,r,s=e.target,t=c.elements.tooltip,u=e.my,v=e.at,w=e.adjust,x=w.method.split(" "),y=x[0],z=x[1]||x[0],A=e.viewport,B=e.container,C=(c.cache,{left:0,top:0});return A.jquery&&s[0]!==a&&s[0]!==b.body&&"none"!==w.method?(m=B.offset()||C,n="static"===B.css("position"),k="fixed"===t.css("position"),o=A[0]===a?A.width():A.outerWidth(E),p=A[0]===a?A.height():A.outerHeight(E),q={left:k?0:A.scrollLeft(),top:k?0:A.scrollTop()},r=A.offset()||C,("shift"!==y||"shift"!==z)&&(l=u.clone()),C={left:"none"!==y?j(G,H,y,w.x,L,N,I,f,h):0,top:"none"!==z?j(H,G,z,w.y,K,M,J,g,i):0,my:l}):C},R.polys={polygon:function(a,b){var c,d,e,f={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10},adjustable:E},g=0,h=[],i=1,j=1,k=0,l=0;for(g=a.length;g--;)c=[parseInt(a[--g],10),parseInt(a[g+1],10)],c[0]>f.position.right&&(f.position.right=c[0]),c[0]<f.position.left&&(f.position.left=c[0]),c[1]>f.position.bottom&&(f.position.bottom=c[1]),c[1]<f.position.top&&(f.position.top=c[1]),h.push(c);if(d=f.width=Math.abs(f.position.right-f.position.left),e=f.height=Math.abs(f.position.bottom-f.position.top),"c"===b.abbrev())f.position={left:f.position.left+f.width/2,top:f.position.top+f.height/2};else{for(;d>0&&e>0&&i>0&&j>0;)for(d=Math.floor(d/2),e=Math.floor(e/2),b.x===L?i=d:b.x===N?i=f.width-d:i+=Math.floor(d/2),b.y===K?j=e:b.y===M?j=f.height-e:j+=Math.floor(e/2),g=h.length;g--&&!(h.length<2);)k=h[g][0]-f.position.left,l=h[g][1]-f.position.top,(b.x===L&&k>=i||b.x===N&&i>=k||b.x===O&&(i>k||k>f.width-i)||b.y===K&&l>=j||b.y===M&&j>=l||b.y===O&&(j>l||l>f.height-j))&&h.splice(g,1);f.position={left:h[0][0],top:h[0][1]}}return f},rect:function(a,b,c,d){return{width:Math.abs(c-a),height:Math.abs(d-b),position:{left:Math.min(a,c),top:Math.min(b,d)}}},_angles:{tc:1.5,tr:7/4,tl:5/4,bc:.5,br:.25,bl:.75,rc:2,lc:1,c:0},ellipse:function(a,b,c,d,e){var f=R.polys._angles[e.abbrev()],g=0===f?0:c*Math.cos(f*Math.PI),h=d*Math.sin(f*Math.PI);return{width:2*c-Math.abs(g),height:2*d-Math.abs(h),position:{left:a+g,top:b+h},adjustable:E}},circle:function(a,b,c,d){return R.polys.ellipse(a,b,c,c,d)}},R.svg=function(a,c,e){for(var f,g,h,i,j,k,l,m,n,o=(d(b),c[0]),p=d(o.ownerSVGElement),q=o.ownerDocument,r=(parseInt(c.css("stroke-width"),10)||0)/2;!o.getBBox;)o=o.parentNode;if(!o.getBBox||!o.parentNode)return E;switch(o.nodeName){case"ellipse":case"circle":m=R.polys.ellipse(o.cx.baseVal.value,o.cy.baseVal.value,(o.rx||o.r).baseVal.value+r,(o.ry||o.r).baseVal.value+r,e);break;case"line":case"polygon":case"polyline":for(l=o.points||[{x:o.x1.baseVal.value,y:o.y1.baseVal.value},{x:o.x2.baseVal.value,y:o.y2.baseVal.value}],m=[],k=-1,i=l.numberOfItems||l.length;++k<i;)j=l.getItem?l.getItem(k):l[k],m.push.apply(m,[j.x,j.y]);m=R.polys.polygon(m,e);break;default:m=o.getBBox(),m={width:m.width,height:m.height,position:{left:m.x,top:m.y}}}return n=m.position,p=p[0],p.createSVGPoint&&(g=o.getScreenCTM(),l=p.createSVGPoint(),l.x=n.left,l.y=n.top,h=l.matrixTransform(g),n.left=h.x,n.top=h.y),q!==b&&"mouse"!==a.position.target&&(f=d((q.defaultView||q.parentWindow).frameElement).offset(),f&&(n.left+=f.left,n.top+=f.top)),q=d(q),n.left+=q.scrollLeft(),n.top+=q.scrollTop(),m},R.imagemap=function(a,b,c){b.jquery||(b=d(b));var e,f,g,h,i,j=(b.attr("shape")||"rect").toLowerCase().replace("poly","polygon"),k=d('img[usemap="#'+b.parent("map").attr("name")+'"]'),l=d.trim(b.attr("coords")),m=l.replace(/,$/,"").split(",");if(!k.length)return E;if("polygon"===j)h=R.polys.polygon(m,c);else{if(!R.polys[j])return E;for(g=-1,i=m.length,f=[];++g<i;)f.push(parseInt(m[g],10));h=R.polys[j].apply(this,f.concat(c))}return e=k.offset(),e.left+=Math.ceil((k.outerWidth(E)-k.width())/2),e.top+=Math.ceil((k.outerHeight(E)-k.height())/2),h.position.left+=e.left,h.position.top+=e.top,h};var Ab,Bb='<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';" style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>';d.extend(x.prototype,{_scroll:function(){var b=this.qtip.elements.overlay;b&&(b[0].style.top=d(a).scrollTop()+"px")},init:function(c){var e=c.tooltip;d("select, object").length<1&&(this.bgiframe=c.elements.bgiframe=d(Bb).appendTo(e),c._bind(e,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=d("<div/>",{id:S+"-rcontainer"}).appendTo(b.body),c.elements.overlay&&c.elements.overlay.addClass("qtipmodal-ie6fix")&&(c._bind(a,["scroll","resize"],this._scroll,this._ns,this),c._bind(e,["tooltipshow"],this._scroll,this._ns,this)),this.redraw()},adjustBGIFrame:function(){var a,b,c=this.qtip.tooltip,d={height:c.outerHeight(E),width:c.outerWidth(E)},e=this.qtip.plugins.tip,f=this.qtip.elements.tip;b=parseInt(c.css("borderLeftWidth"),10)||0,b={left:-b,top:-b},e&&f&&(a="x"===e.corner.precedance?[I,L]:[J,K],b[a[1]]-=f[a[0]]()),this.bgiframe.css(b).css(d)},redraw:function(){if(this.qtip.rendered<1||this.drawing)return this;var a,b,c,d,e=this.qtip.tooltip,f=this.qtip.options.style,g=this.qtip.options.position.container;return this.qtip.drawing=1,f.height&&e.css(J,f.height),f.width?e.css(I,f.width):(e.css(I,"").appendTo(this.redrawContainer),b=e.width(),1>b%2&&(b+=1),c=e.css("maxWidth")||"",d=e.css("minWidth")||"",a=(c+d).indexOf("%")>-1?g.width()/100:0,c=(c.indexOf("%")>-1?a:1)*parseInt(c,10)||b,d=(d.indexOf("%")>-1?a:1)*parseInt(d,10)||0,b=c+d?Math.min(Math.max(b,d),c):b,e.css(I,Math.round(b)).appendTo(g)),this.drawing=0,this},destroy:function(){this.bgiframe&&this.bgiframe.remove(),this.qtip._unbind([a,this.qtip.tooltip],this._ns)}}),Ab=R.ie6=function(a){return 6===db.ie?new x(a):E},Ab.initialize="render",B.ie6={"^content|style$":function(){this.redraw()}}})}(window,document);
5
  //# sourceMappingURL=jquery.qtip.min.js.map
1
+ /* qTip2 v2.2.1 | Plugins: tips modal viewport svg imagemap ie6 | Styles: core basic css3 | qtip2.com | Licensed MIT | Sat Sep 06 2014 23:12:07 */
2
+
3
+ !function(a,b,c){!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)}(function(d){"use strict";function e(a,b,c,e){this.id=c,this.target=a,this.tooltip=F,this.elements={target:a},this._id=S+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:E,attr:e,onTooltip:E,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=E}function f(a){return a===F||"object"!==d.type(a)}function g(a){return!(d.isFunction(a)||a&&a.attr||a.length||"object"===d.type(a)&&(a.jquery||a.then))}function h(a){var b,c,e,h;return f(a)?E:(f(a.metadata)&&(a.metadata={type:a.metadata}),"content"in a&&(b=a.content,f(b)||b.jquery||b.done?b=a.content={text:c=g(b)?E:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==E,delete b.ajax,b.text=function(a,b){var f=c||d(this).attr(b.options.content.attr)||"Loading...",g=d.ajax(d.extend({},e,{context:b})).then(e.success,F,e.error).then(function(a){return a&&h&&b.set("content.text",a),a},function(a,c,d){b.destroyed||0===a.status||b.set("content.text",c+": "+d)});return h?f:(b.set("content.text",f),g)}),"title"in b&&(d.isPlainObject(b.title)&&(b.button=b.title.button,b.title=b.title.text),g(b.title||E)&&(b.title=E))),"position"in a&&f(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&f(a.show)&&(a.show=a.show.jquery?{target:a.show}:a.show===D?{ready:D}:{event:a.show}),"hide"in a&&f(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&f(a.style)&&(a.style={classes:a.style}),d.each(R,function(){this.sanitize&&this.sanitize(a)}),a)}function i(a,b){for(var c,d=0,e=a,f=b.split(".");e=e[f[d++]];)d<f.length&&(c=e);return[c||a,f.pop()]}function j(a,b){var c,d,e;for(c in this.checks)for(d in this.checks[c])(e=new RegExp(d,"i").exec(a))&&(b.push(e),("builtin"===c||this.plugins[c])&&this.checks[c][d].apply(this.plugins[c]||this,b))}function k(a){return V.concat("").join(a?"-"+a+" ":" ")}function l(a,b){return b>0?setTimeout(d.proxy(a,this),b):void a.call(this)}function m(a){this.tooltip.hasClass(ab)||(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=l.call(this,function(){this.toggle(D,a)},this.options.show.delay))}function n(a){if(!this.tooltip.hasClass(ab)&&!this.destroyed){var b=d(a.relatedTarget),c=b.closest(W)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=l.call(this,function(){this.toggle(E,a)},this.options.hide.delay,this)}}function o(a){!this.tooltip.hasClass(ab)&&this.options.hide.inactive&&(clearTimeout(this.timers.inactive),this.timers.inactive=l.call(this,function(){this.hide(a)},this.options.hide.inactive))}function p(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function q(a,c,e){d(b.body).delegate(a,(c.split?c:c.join("."+S+" "))+"."+S,function(){var a=y.api[d.attr(this,U)];a&&!a.disabled&&e.apply(a,arguments)})}function r(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):F,p="html5"===f.metadata.type&&o?o[f.metadata.name]:F,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(D,{},y.defaults,f,"object"==typeof q?h(q):F,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===E||!j)return E;k.content.text=j}if(i.container.length||(i.container=m),i.target===E&&(i.target=n),k.show.target===E&&(k.show.target=n),k.show.solo===D&&(k.show.solo=i.container.closest("body")),k.hide.target===E&&(k.hide.target=n),k.position.viewport===D&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new A(i.at,D),i.my=new A(i.my),a.data(S))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===E)return E;return a.attr(T,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(cb,l).attr("title",""),g=new e(a,k,c,!!j),a.data(S,g),g}function s(a){return a.charAt(0).toUpperCase()+a.slice(1)}function t(a,b){var d,e,f=b.charAt(0).toUpperCase()+b.slice(1),g=(b+" "+rb.join(f+" ")+f).split(" "),h=0;if(qb[b])return a.css(qb[b]);for(;d=g[h++];)if((e=a.css(d))!==c)return qb[b]=d,e}function u(a,b){return Math.ceil(parseFloat(t(a,b)))}function v(a,b){this._ns="tip",this.options=b,this.offset=b.offset,this.size=[b.width,b.height],this.init(this.qtip=a)}function w(a,b){this.options=b,this._ns="-modal",this.init(this.qtip=a)}function x(a){this._ns="ie6",this.init(this.qtip=a)}var y,z,A,B,C,D=!0,E=!1,F=null,G="x",H="y",I="width",J="height",K="top",L="left",M="bottom",N="right",O="center",P="flipinvert",Q="shift",R={},S="qtip",T="data-hasqtip",U="data-qtip-id",V=["ui-widget","ui-tooltip"],W="."+S,X="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),Y=S+"-fixed",Z=S+"-default",$=S+"-focus",_=S+"-hover",ab=S+"-disabled",bb="_replacedByqTip",cb="oldtitle",db={ie:function(){for(var a=4,c=b.createElement("div");(c.innerHTML="<!--[if gt IE "+a+"]><i></i><![endif]-->")&&c.getElementsByTagName("i")[0];a+=1);return a>4?a:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||E};z=e.prototype,z._when=function(a){return d.when.apply(d,a)},z.render=function(a){if(this.rendered||this.destroyed)return this;var b,c=this,e=this.options,f=this.cache,g=this.elements,h=e.content.text,i=e.content.title,j=e.content.button,k=e.position,l=("."+this._id+" ",[]);return d.attr(this.target[0],"aria-describedby",this._id),f.posClass=this._createPosClass((this.position={my:k.my,at:k.at}).my),this.tooltip=g.tooltip=b=d("<div/>",{id:this._id,"class":[S,Z,e.style.classes,f.posClass].join(" "),width:e.style.width||"",height:e.style.height||"",tracking:"mouse"===k.target&&k.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":E,"aria-describedby":this._id+"-content","aria-hidden":D}).toggleClass(ab,this.disabled).attr(U,this.id).data(S,this).appendTo(k.container).append(g.content=d("<div />",{"class":S+"-content",id:this._id+"-content","aria-atomic":D})),this.rendered=-1,this.positioning=D,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,E))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,E)),this.rendered=D,this._setWidget(),d.each(R,function(a){var b;"render"===this.initialize&&(b=this(c))&&(c.plugins[a]=b)}),this._unassignEvents(),this._assignEvents(),this._when(l).then(function(){c._trigger("render"),c.positioning=E,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(D,f.event,E),c.hiddenDuringWait=E}),y.api[this.id]=this,this},z.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=D;var a,b=this.target,c=b.attr(cb);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()});for(a in this.timers)clearTimeout(this.timers[a]);b.removeData(S).removeAttr(U).removeAttr(T).removeAttr("aria-describedby"),this.options.suppress&&c&&b.attr("title",c).removeAttr(cb),this._unassignEvents(),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=F,delete y.api[this.id]}}return this.destroyed?this.target:(a===D&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},B=z.checks={builtin:{"^id$":function(a,b,c,e){var f=c===D?y.nextid:c,g=S+"-"+f;f!==E&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),void this._updateTitle(c)):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(this.position[b]=a[b]=new A(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(D)||this.toggle(D))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def":function(a,b,c){this.rendered&&this.tooltip.toggleClass(Z,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},z.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var eb=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,fb=/^prerender|show\.ready/i;z.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=E,g=this.options;this.checks}return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&fb.test(b))return void delete a[b];var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.nodeType?d(c):c,f=eb.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=D,d.each(a,d.proxy(j,this)),this.positioning=E,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?F:this.cache.event),this},z._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=D,a.then(function(a){return e.waiting=E,c._update(a,b)},F,function(a){return c._update(a,b)})):a===E||!a&&""!==a?E:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):E},z._waitForContent=function(a){var b=this.cache;return b.waiting=D,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=E}).promise()},z._updateContent=function(a,b){this._update(a,this.elements.content,b)},z._updateTitle=function(a,b){this._update(a,this.elements.title,b)===E&&this._removeTitle(E)},z._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("<div />",{"class":S+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("<div />",{id:b,"class":S+"-title","aria-atomic":D})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},z._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=F,a!==E&&this.reposition())},z._createPosClass=function(a){return S+"-pos-"+(a||this.options.position.my).abbrev()},z.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=D;var f,g,h,i,j=this.cache,k=this.tooltip,l=this.options.position,m=l.target,n=l.my,o=l.at,p=l.viewport,q=l.container,r=l.adjust,s=r.method.split(" "),t=k.outerWidth(E),u=k.outerHeight(E),v=0,w=0,x=k.css("position"),y={left:0,top:0},z=k[0].offsetWidth>0,A=c&&"scroll"===c.type,B=d(a),C=q[0].ownerDocument,F=this.mouse;if(d.isArray(m)&&2===m.length)o={x:L,y:K},y={left:m[0],top:m[1]};else if("mouse"===m)o={x:L,y:K},(!r.mouse||this.options.hide.distance)&&j.origin&&j.origin.pageX?c=j.origin:!c||c&&("resize"===c.type||"scroll"===c.type)?c=j.event:F&&F.pageX&&(c=F),"static"!==x&&(y=q.offset()),C.body.offsetWidth!==(a.innerWidth||C.documentElement.clientWidth)&&(g=d(b.body).offset()),y={left:c.pageX-y.left+(g&&g.left||0),top:c.pageY-y.top+(g&&g.top||0)},r.mouse&&A&&F&&(y.left-=(F.scrollX||0)-B.scrollLeft(),y.top-=(F.scrollY||0)-B.scrollTop());else{if("event"===m?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?j.target=d(c.target):c.target||(j.target=this.elements.target):"event"!==m&&(j.target=d(m.jquery?m:this.elements.target)),m=j.target,m=d(m).eq(0),0===m.length)return this;m[0]===b||m[0]===a?(v=db.iOS?a.innerWidth:m.width(),w=db.iOS?a.innerHeight:m.height(),m[0]===a&&(y={top:(p||m).scrollTop(),left:(p||m).scrollLeft()})):R.imagemap&&m.is("area")?f=R.imagemap(this,m,o,R.viewport?s:E):R.svg&&m&&m[0].ownerSVGElement?f=R.svg(this,m,o,R.viewport?s:E):(v=m.outerWidth(E),w=m.outerHeight(E),y=m.offset()),f&&(v=f.width,w=f.height,g=f.offset,y=f.position),y=this.reposition.offset(m,y,q),(db.iOS>3.1&&db.iOS<4.1||db.iOS>=4.3&&db.iOS<4.33||!db.iOS&&"fixed"===x)&&(y.left-=B.scrollLeft(),y.top-=B.scrollTop()),(!f||f&&f.adjustable!==E)&&(y.left+=o.x===N?v:o.x===O?v/2:0,y.top+=o.y===M?w:o.y===O?w/2:0)}return y.left+=r.x+(n.x===N?-t:n.x===O?-t/2:0),y.top+=r.y+(n.y===M?-u:n.y===O?-u/2:0),R.viewport?(h=y.adjusted=R.viewport(this,y,l,v,w,t,u),g&&h.left&&(y.left+=g.left),g&&h.top&&(y.top+=g.top),h.my&&(this.position.my=h.my)):y.adjusted={left:0,top:0},j.posClass!==(i=this._createPosClass(this.position.my))&&k.removeClass(j.posClass).addClass(j.posClass=i),this._trigger("move",[y,p.elem||p],c)?(delete y.adjusted,e===E||!z||isNaN(y.left)||isNaN(y.top)||"mouse"===m||!d.isFunction(l.effect)?k.css(y):d.isFunction(l.effect)&&(l.effect.call(k,this,d.extend({},y)),k.queue(function(a){d(this).css({opacity:"",height:""}),db.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=E,this):this},z.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!db.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||"visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var gb=(A=z.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,O).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?H:G}).prototype;gb.invert=function(a,b){this[a]=this[a]===L?N:this[a]===N?L:b||this[a]},gb.string=function(a){var b=this.x,c=this.y,d=b!==c?"center"===b||"center"!==c&&(this.precedance===H||this.forceY)?[c,b]:[b,c]:[b];return a!==!1?d.join(" "):d},gb.abbrev=function(){var a=this.string(!1);return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},gb.clone=function(){return new A(this.string(),this.forceY)},z.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&e.event&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).length===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=d.event.fix(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=D),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",l=this.options[k],m=(this.options[a?"hide":"show"],this.options.position),n=this.options.content,o=this.tooltip.css("width"),p=this.tooltip.is(":visible"),q=a||1===l.target.length,r=!c||l.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!p),h=!g.is(":animated")&&p===a&&r,i=h?F:!!this._trigger(k,[90]),this.destroyed?this:(i!==E&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(this.mouse&&(e.origin=d.event.fix(this.mouse)),d.isFunction(n.text)&&this._updateContent(n.text,E),d.isFunction(n.title)&&this._updateTitle(n.title,E),!C&&"mouse"===m.target&&m.adjust.mouse&&(d(b).bind("mousemove."+S,this._storeMouse),C=D),o||g.css("width",g.outerWidth(E)),this.reposition(c,arguments[2]),o||g.css("width",""),l.solo&&("string"==typeof l.solo?d(l.solo):d(W,l.solo)).not(g).not(l.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,C&&!d(W+'[tracking="true"]:visible',l.solo).not(g).length&&(d(b).unbind("mousemove."+S),C=E),this.blur(c)),j=d.proxy(function(){a?(db.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof l.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),l.effect===E||q===E?(g[k](),j()):d.isFunction(l.effect)?(g.stop(1,1),l.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&l.target.trigger("qtip-"+this.id+"-inactive"),this))},z.show=function(a){return this.toggle(D,a)},z.hide=function(a){return this.toggle(E,a)},z.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(W),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=y.zindex+b.length;return c.hasClass($)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+$).qtip("blur",a)),c.addClass($)[0].style.zIndex=f),this},z.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass($),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},z.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(ab):this.disabled):"boolean"!=typeof a&&(a=D),this.rendered&&this.tooltip.toggleClass(ab,a).attr("aria-disabled",a),this.disabled=!!a,this)},z.enable=function(){return this.disable(E)},z._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),b.button=e.jquery?e:d("<a />",{"class":"qtip-close "+(this.options.style.widget?"":S+"-icon"),title:g,"aria-label":g}).prepend(d("<span />",{"class":"ui-icon ui-icon-close",html:"&times;"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(ab)||a.hide(b),E})},z._updateButton=function(a){if(!this.rendered)return E;var b=this.elements.button;a?this._createButton():b.remove()},z._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(ab);c.removeClass(ab),ab=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(ab,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass(Z,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(S+"-icon",!a)},z._storeMouse=function(a){return(this.mouse=d.event.fix(a)).type="mousemove",this},z._bind=function(a,b,c,e,f){if(a&&c&&b.length){var g="."+this._id+(e?"-"+e:"");return d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this)),this}},z._unbind=function(a,b){return a&&d(a).unbind("."+this._id+(b?"-"+b:"")),this},z._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||F,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=E,!e.isDefaultPrevented()},z._bindEvents=function(a,b,c,e,f,g){var h=c.filter(e).add(e.filter(c)),i=[];h.length&&(d.each(b,function(b,c){var e=d.inArray(c,a);e>-1&&i.push(a.splice(e,1)[0])}),i.length&&(this._bind(h,i,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)}),c=c.not(h),e=e.not(h))),this._bind(c,a,f),this._bind(e,b,g)},z._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?E:(this.cache.event=a&&d.event.fix(a),this.cache.target=a&&d(a.target),clearTimeout(this.timers.show),void(this.timers.show=l.call(this,function(){this.render("object"==typeof a||c.show.ready)},c.prerender?0:c.show.delay)))}var c=this.options,e=c.show.target,f=c.hide.target,g=c.show.event?d.trim(""+c.show.event).split(" "):[],h=c.hide.event?d.trim(""+c.hide.event).split(" "):[];this._bind(this.elements.target,["remove","removeqtip"],function(){this.destroy(!0)},"destroy"),/mouse(over|enter)/i.test(c.show.event)&&!/mouse(out|leave)/i.test(c.hide.event)&&h.push("mouseleave"),this._bind(e,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=D}),this._bindEvents(g,h,e,f,b,function(){return this.timers?void clearTimeout(this.timers.show):E}),(c.show.ready||c.prerender)&&b.call(this,a)},z._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),q=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],s=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeName)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(Y)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0,e=b.parents(W).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",o,"inactive"),this._bind(i.add(g),y.inactiveEvents,o)),this._bindEvents(r,s,h,i,m,n),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mouseenter","mouseleave"],function(a){return this.cache?void(this.cache.onTarget="mouseenter"===a.type):E}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:q,"resize",p),f.adjust.scroll&&this._bind(q.add(f.container),"scroll",p)},z._unassignEvents=function(){var c=this.options,e=c.show.target,f=c.hide.target,g=d.grep([this.elements.target[0],this.rendered&&this.tooltip[0],c.position.container[0],c.position.viewport[0],c.position.container.closest("html")[0],a,b],function(a){return"object"==typeof a});e&&e.toArray&&(g=g.concat(e.toArray())),f&&f.toArray&&(g=g.concat(f.toArray())),this._unbind(g)._unbind(g,"destroy")._unbind(g,"inactive")},d(function(){q(W,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(Y)&&!c.hasClass(ab)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.position.adjust.mouse&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(_,b)}),q("["+U+"]",X,o)}),y=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=F,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],S):F;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,S);if(!a)return D;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),E;a.set(b,e)}}),g!==F?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(D,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===E||c.length<1||y.api[c]?y.nextid++:c,b=r(d(this),c,k),b===E?D:(y.api[c]=b,d.each(R,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,y.api={},d.each({attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,cb):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(cb,b))}return d.fn["attr"+bb].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+bb].apply(this,arguments));return a||b.filter("["+cb+"]").attr("title",function(){return d.attr(this,cb)}).removeAttr(cb),b}},function(a,b){if(!b||d.fn[a+bb])return D;var c=d.fn[a+bb]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+bb]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(T))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+bb].apply(this,arguments)}),y.version="2.2.1",y.nextid=0,y.inactiveEvents=X,y.zindex=15e3,y.defaults={prerender:E,id:E,overwrite:D,suppress:D,content:{text:D,attr:"title",title:E,button:E},position:{my:"top left",at:"bottom right",target:E,container:E,viewport:E,adjust:{x:0,y:0,mouse:D,scroll:D,resize:D,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:E})}},show:{target:E,event:"mouseenter",effect:D,delay:90,solo:E,ready:E,autofocus:E},hide:{target:E,event:"mouseleave",effect:D,delay:0,fixed:E,inactive:E,leave:"window",distance:E},style:{classes:"",widget:E,width:E,height:E,def:D},events:{render:F,move:F,show:F,hide:F,toggle:F,visible:F,hidden:F,focus:F,blur:F}};var hb,ib="margin",jb="border",kb="color",lb="background-color",mb="transparent",nb=" !important",ob=!!b.createElement("canvas").getContext,pb=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,qb={},rb=["Webkit","O","Moz","ms"];if(ob)var sb=a.devicePixelRatio||1,tb=function(){var a=b.createElement("canvas").getContext("2d");return a.backingStorePixelRatio||a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||1}(),ub=sb/tb;else var vb=function(a,b,c){return"<qtipvml:"+a+' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" '+(b||"")+' style="behavior: url(#default#VML); '+(c||"")+'" />'};d.extend(v.prototype,{init:function(a){var b,c;c=this.element=a.elements.tip=d("<div />",{"class":S+"-tip"}).prependTo(a.tooltip),ob?(b=d("<canvas />").appendTo(this.element)[0].getContext("2d"),b.lineJoin="miter",b.miterLimit=1e5,b.save()):(b=vb("shape",'coordorigin="0,0"',"position:absolute;"),this.element.html(b+b),a._bind(d("*",c).add(c),["click","mousedown"],function(a){a.stopPropagation()},this._ns)),a._bind(a.tooltip,"tooltipmove",this.reposition,this._ns,this),this.create()},_swapDimensions:function(){this.size[0]=this.options.height,this.size[1]=this.options.width},_resetDimensions:function(){this.size[0]=this.options.width,this.size[1]=this.options.height},_useTitle:function(a){var b=this.qtip.elements.titlebar;return b&&(a.y===K||a.y===O&&this.element.position().top+this.size[1]/2+this.options.offset<b.outerHeight(D))},_parseCorner:function(a){var b=this.qtip.options.position.my;return a===E||b===E?a=E:a===D?a=new A(b.string()):a.string||(a=new A(a),a.fixed=D),a},_parseWidth:function(a,b,c){var d=this.qtip.elements,e=jb+s(b)+"Width";return(c?u(c,e):u(d.content,e)||u(this._useTitle(a)&&d.titlebar||d.content,e)||u(d.tooltip,e))||0},_parseRadius:function(a){var b=this.qtip.elements,c=jb+s(a.y)+s(a.x)+"Radius";return db.ie<9?0:u(this._useTitle(a)&&b.titlebar||b.content,c)||u(b.tooltip,c)||0},_invalidColour:function(a,b,c){var d=a.css(b);return!d||c&&d===a.css(c)||pb.test(d)?E:d},_parseColours:function(a){var b=this.qtip.elements,c=this.element.css("cssText",""),e=jb+s(a[a.precedance])+s(kb),f=this._useTitle(a)&&b.titlebar||b.content,g=this._invalidColour,h=[];return h[0]=g(c,lb)||g(f,lb)||g(b.content,lb)||g(b.tooltip,lb)||c.css(lb),h[1]=g(c,e,kb)||g(f,e,kb)||g(b.content,e,kb)||g(b.tooltip,e,kb)||b.tooltip.css(e),d("*",c).add(c).css("cssText",lb+":"+mb+nb+";"+jb+":0"+nb+";"),h},_calculateSize:function(a){var b,c,d,e=a.precedance===H,f=this.options.width,g=this.options.height,h="c"===a.abbrev(),i=(e?f:g)*(h?.5:1),j=Math.pow,k=Math.round,l=Math.sqrt(j(i,2)+j(g,2)),m=[this.border/i*l,this.border/g*l];return m[2]=Math.sqrt(j(m[0],2)-j(this.border,2)),m[3]=Math.sqrt(j(m[1],2)-j(this.border,2)),b=l+m[2]+m[3]+(h?0:m[0]),c=b/l,d=[k(c*f),k(c*g)],e?d:d.reverse()},_calculateTip:function(a,b,c){c=c||1,b=b||this.size;var d=b[0]*c,e=b[1]*c,f=Math.ceil(d/2),g=Math.ceil(e/2),h={br:[0,0,d,e,d,0],bl:[0,0,d,0,0,e],tr:[0,e,d,0,d,e],tl:[0,0,0,e,d,e],tc:[0,e,f,0,d,e],bc:[0,0,d,0,f,e],rc:[0,0,d,g,0,e],lc:[d,0,d,e,0,g]};return h.lt=h.br,h.rt=h.bl,h.lb=h.tr,h.rb=h.tl,h[a.abbrev()]},_drawCoords:function(a,b){a.beginPath(),a.moveTo(b[0],b[1]),a.lineTo(b[2],b[3]),a.lineTo(b[4],b[5]),a.closePath()},create:function(){var a=this.corner=(ob||db.ie)&&this._parseCorner(this.options.corner);return(this.enabled=!!this.corner&&"c"!==this.corner.abbrev())&&(this.qtip.cache.corner=a.clone(),this.update()),this.element.toggle(this.enabled),this.corner},update:function(b,c){if(!this.enabled)return this;var e,f,g,h,i,j,k,l,m=this.qtip.elements,n=this.element,o=n.children(),p=this.options,q=this.size,r=p.mimic,s=Math.round;b||(b=this.qtip.cache.corner||this.corner),r===E?r=b:(r=new A(r),r.precedance=b.precedance,"inherit"===r.x?r.x=b.x:"inherit"===r.y?r.y=b.y:r.x===r.y&&(r[b.precedance]=b[b.precedance])),f=r.precedance,b.precedance===G?this._swapDimensions():this._resetDimensions(),e=this.color=this._parseColours(b),e[1]!==mb?(l=this.border=this._parseWidth(b,b[b.precedance]),p.border&&1>l&&!pb.test(e[1])&&(e[0]=e[1]),this.border=l=p.border!==D?p.border:l):this.border=l=0,k=this.size=this._calculateSize(b),n.css({width:k[0],height:k[1],lineHeight:k[1]+"px"}),j=b.precedance===H?[s(r.x===L?l:r.x===N?k[0]-q[0]-l:(k[0]-q[0])/2),s(r.y===K?k[1]-q[1]:0)]:[s(r.x===L?k[0]-q[0]:0),s(r.y===K?l:r.y===M?k[1]-q[1]-l:(k[1]-q[1])/2)],ob?(g=o[0].getContext("2d"),g.restore(),g.save(),g.clearRect(0,0,6e3,6e3),h=this._calculateTip(r,q,ub),i=this._calculateTip(r,this.size,ub),o.attr(I,k[0]*ub).attr(J,k[1]*ub),o.css(I,k[0]).css(J,k[1]),this._drawCoords(g,i),g.fillStyle=e[1],g.fill(),g.translate(j[0]*ub,j[1]*ub),this._drawCoords(g,h),g.fillStyle=e[0],g.fill()):(h=this._calculateTip(r),h="m"+h[0]+","+h[1]+" l"+h[2]+","+h[3]+" "+h[4]+","+h[5]+" xe",j[2]=l&&/^(r|b)/i.test(b.string())?8===db.ie?2:1:0,o.css({coordsize:k[0]+l+" "+(k[1]+l),antialias:""+(r.string().indexOf(O)>-1),left:j[0]-j[2]*Number(f===G),top:j[1]-j[2]*Number(f===H),width:k[0]+l,height:k[1]+l}).each(function(a){var b=d(this);b[b.prop?"prop":"attr"]({coordsize:k[0]+l+" "+(k[1]+l),path:h,fillcolor:e[0],filled:!!a,stroked:!a}).toggle(!(!l&&!a)),!a&&b.html(vb("stroke",'weight="'+2*l+'px" color="'+e[1]+'" miterlimit="1000" joinstyle="miter"'))})),a.opera&&setTimeout(function(){m.tip.css({display:"inline-block",visibility:"visible"})},1),c!==E&&this.calculate(b,k)},calculate:function(a,b){if(!this.enabled)return E;var c,e,f=this,g=this.qtip.elements,h=this.element,i=this.options.offset,j=(g.tooltip.hasClass("ui-widget"),{});return a=a||this.corner,c=a.precedance,b=b||this._calculateSize(a),e=[a.x,a.y],c===G&&e.reverse(),d.each(e,function(d,e){var h,k,l;
4
+ e===O?(h=c===H?L:K,j[h]="50%",j[ib+"-"+h]=-Math.round(b[c===H?0:1]/2)+i):(h=f._parseWidth(a,e,g.tooltip),k=f._parseWidth(a,e,g.content),l=f._parseRadius(a),j[e]=Math.max(-f.border,d?k:i+(l>h?l:-h)))}),j[a[c]]-=b[c===G?0:1],h.css({margin:"",top:"",bottom:"",left:"",right:""}).css(j),j},reposition:function(a,b,d){function e(a,b,c,d,e){a===Q&&j.precedance===b&&k[d]&&j[c]!==O?j.precedance=j.precedance===G?H:G:a!==Q&&k[d]&&(j[b]=j[b]===O?k[d]>0?d:e:j[b]===d?e:d)}function f(a,b,e){j[a]===O?p[ib+"-"+b]=o[a]=g[ib+"-"+b]-k[b]:(h=g[e]!==c?[k[b],-g[b]]:[-k[b],g[b]],(o[a]=Math.max(h[0],h[1]))>h[0]&&(d[b]-=k[b],o[b]=E),p[g[e]!==c?e:b]=o[a])}if(this.enabled){var g,h,i=b.cache,j=this.corner.clone(),k=d.adjusted,l=b.options.position.adjust.method.split(" "),m=l[0],n=l[1]||l[0],o={left:E,top:E,x:0,y:0},p={};this.corner.fixed!==D&&(e(m,G,H,L,N),e(n,H,G,K,M),(j.string()!==i.corner.string()||i.cornerTop!==k.top||i.cornerLeft!==k.left)&&this.update(j,E)),g=this.calculate(j),g.right!==c&&(g.left=-g.right),g.bottom!==c&&(g.top=-g.bottom),g.user=this.offset,(o.left=m===Q&&!!k.left)&&f(G,L,N),(o.top=n===Q&&!!k.top)&&f(H,K,M),this.element.css(p).toggle(!(o.x&&o.y||j.x===O&&o.y||j.y===O&&o.x)),d.left-=g.left.charAt?g.user:m!==Q||o.top||!o.left&&!o.top?g.left+this.border:0,d.top-=g.top.charAt?g.user:n!==Q||o.left||!o.left&&!o.top?g.top+this.border:0,i.cornerLeft=k.left,i.cornerTop=k.top,i.corner=j.clone()}},destroy:function(){this.qtip._unbind(this.qtip.tooltip,this._ns),this.qtip.elements.tip&&this.qtip.elements.tip.find("*").remove().end().remove()}}),hb=R.tip=function(a){return new v(a,a.options.style.tip)},hb.initialize="render",hb.sanitize=function(a){if(a.style&&"tip"in a.style){var b=a.style.tip;"object"!=typeof b&&(b=a.style.tip={corner:b}),/string|boolean/i.test(typeof b.corner)||(b.corner=D)}},B.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){this.create(),this.qtip.reposition()},"^style.tip.(height|width)$":function(a){this.size=[a.width,a.height],this.update(),this.qtip.reposition()},"^content.title|style.(classes|widget)$":function(){this.update()}},d.extend(D,y.defaults,{style:{tip:{corner:D,mimic:E,width:6,height:6,border:D,offset:0}}});var wb,xb,yb="qtip-modal",zb="."+yb;xb=function(){function a(a){if(d.expr[":"].focusable)return d.expr[":"].focusable;var b,c,e,f=!isNaN(d.attr(a,"tabindex")),g=a.nodeName&&a.nodeName.toLowerCase();return"area"===g?(b=a.parentNode,c=b.name,a.href&&c&&"map"===b.nodeName.toLowerCase()?(e=d("img[usemap=#"+c+"]")[0],!!e&&e.is(":visible")):!1):/input|select|textarea|button|object/.test(g)?!a.disabled:"a"===g?a.href||f:f}function c(a){k.length<1&&a.length?a.not("body").blur():k.first().focus()}function e(a){if(i.is(":visible")){var b,e=d(a.target),h=f.tooltip,j=e.closest(W);b=j.length<1?E:parseInt(j[0].style.zIndex,10)>parseInt(h[0].style.zIndex,10),b||e.closest(W)[0]===h[0]||c(e),g=a.target===k[k.length-1]}}var f,g,h,i,j=this,k={};d.extend(j,{init:function(){return i=j.elem=d("<div />",{id:"qtip-overlay",html:"<div></div>",mousedown:function(){return E}}).hide(),d(b.body).bind("focusin"+zb,e),d(b).bind("keydown"+zb,function(a){f&&f.options.show.modal.escape&&27===a.keyCode&&f.hide(a)}),i.bind("click"+zb,function(a){f&&f.options.show.modal.blur&&f.hide(a)}),j},update:function(b){f=b,k=b.options.show.modal.stealfocus!==E?b.tooltip.find("*").filter(function(){return a(this)}):[]},toggle:function(a,e,g){var k=(d(b.body),a.tooltip),l=a.options.show.modal,m=l.effect,n=e?"show":"hide",o=i.is(":visible"),p=d(zb).filter(":visible:not(:animated)").not(k);return j.update(a),e&&l.stealfocus!==E&&c(d(":focus")),i.toggleClass("blurs",l.blur),e&&i.appendTo(b.body),i.is(":animated")&&o===e&&h!==E||!e&&p.length?j:(i.stop(D,E),d.isFunction(m)?m.call(i,e):m===E?i[n]():i.fadeTo(parseInt(g,10)||90,e?1:0,function(){e||i.hide()}),e||i.queue(function(a){i.css({left:"",top:""}),d(zb).length||i.detach(),a()}),h=e,f.destroyed&&(f=F),j)}}),j.init()},xb=new xb,d.extend(w.prototype,{init:function(a){var b=a.tooltip;return this.options.on?(a.elements.overlay=xb.elem,b.addClass(yb).css("z-index",y.modal_zindex+d(zb).length),a._bind(b,["tooltipshow","tooltiphide"],function(a,c,e){var f=a.originalEvent;if(a.target===b[0])if(f&&"tooltiphide"===a.type&&/mouse(leave|enter)/.test(f.type)&&d(f.relatedTarget).closest(xb.elem[0]).length)try{a.preventDefault()}catch(g){}else(!f||f&&"tooltipsolo"!==f.type)&&this.toggle(a,"tooltipshow"===a.type,e)},this._ns,this),a._bind(b,"tooltipfocus",function(a,c){if(!a.isDefaultPrevented()&&a.target===b[0]){var e=d(zb),f=y.modal_zindex+e.length,g=parseInt(b[0].style.zIndex,10);xb.elem[0].style.zIndex=f-1,e.each(function(){this.style.zIndex>g&&(this.style.zIndex-=1)}),e.filter("."+$).qtip("blur",a.originalEvent),b.addClass($)[0].style.zIndex=f,xb.update(c);try{a.preventDefault()}catch(h){}}},this._ns,this),void a._bind(b,"tooltiphide",function(a){a.target===b[0]&&d(zb).filter(":visible").not(b).last().qtip("focus",a)},this._ns,this)):this},toggle:function(a,b,c){return a&&a.isDefaultPrevented()?this:void xb.toggle(this.qtip,!!b,c)},destroy:function(){this.qtip.tooltip.removeClass(yb),this.qtip._unbind(this.qtip.tooltip,this._ns),xb.toggle(this.qtip,E),delete this.qtip.elements.overlay}}),wb=R.modal=function(a){return new w(a,a.options.show.modal)},wb.sanitize=function(a){a.show&&("object"!=typeof a.show.modal?a.show.modal={on:!!a.show.modal}:"undefined"==typeof a.show.modal.on&&(a.show.modal.on=D))},y.modal_zindex=y.zindex-200,wb.initialize="render",B.modal={"^show.modal.(on|blur)$":function(){this.destroy(),this.init(),this.qtip.elems.overlay.toggle(this.qtip.tooltip[0].offsetWidth>0)}},d.extend(D,y.defaults,{show:{modal:{on:E,effect:D,blur:D,stealfocus:D,escape:D}}}),R.viewport=function(c,d,e,f,g,h,i){function j(a,b,c,e,f,g,h,i,j){var k=d[f],s=u[a],t=v[a],w=c===Q,x=s===f?j:s===g?-j:-j/2,y=t===f?i:t===g?-i:-i/2,z=q[f]+r[f]-(n?0:m[f]),A=z-k,B=k+j-(h===I?o:p)-z,C=x-(u.precedance===a||s===u[b]?y:0)-(t===O?i/2:0);return w?(C=(s===f?1:-1)*x,d[f]+=A>0?A:B>0?-B:0,d[f]=Math.max(-m[f]+r[f],k-C,Math.min(Math.max(-m[f]+r[f]+(h===I?o:p),k+C),d[f],"center"===s?k-x:1e9))):(e*=c===P?2:0,A>0&&(s!==f||B>0)?(d[f]-=C+e,l.invert(a,f)):B>0&&(s!==g||A>0)&&(d[f]-=(s===O?-C:C)+e,l.invert(a,g)),d[f]<q&&-d[f]>B&&(d[f]=k,l=u.clone())),d[f]-k}var k,l,m,n,o,p,q,r,s=e.target,t=c.elements.tooltip,u=e.my,v=e.at,w=e.adjust,x=w.method.split(" "),y=x[0],z=x[1]||x[0],A=e.viewport,B=e.container,C=(c.cache,{left:0,top:0});return A.jquery&&s[0]!==a&&s[0]!==b.body&&"none"!==w.method?(m=B.offset()||C,n="static"===B.css("position"),k="fixed"===t.css("position"),o=A[0]===a?A.width():A.outerWidth(E),p=A[0]===a?A.height():A.outerHeight(E),q={left:k?0:A.scrollLeft(),top:k?0:A.scrollTop()},r=A.offset()||C,("shift"!==y||"shift"!==z)&&(l=u.clone()),C={left:"none"!==y?j(G,H,y,w.x,L,N,I,f,h):0,top:"none"!==z?j(H,G,z,w.y,K,M,J,g,i):0,my:l}):C},R.polys={polygon:function(a,b){var c,d,e,f={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10},adjustable:E},g=0,h=[],i=1,j=1,k=0,l=0;for(g=a.length;g--;)c=[parseInt(a[--g],10),parseInt(a[g+1],10)],c[0]>f.position.right&&(f.position.right=c[0]),c[0]<f.position.left&&(f.position.left=c[0]),c[1]>f.position.bottom&&(f.position.bottom=c[1]),c[1]<f.position.top&&(f.position.top=c[1]),h.push(c);if(d=f.width=Math.abs(f.position.right-f.position.left),e=f.height=Math.abs(f.position.bottom-f.position.top),"c"===b.abbrev())f.position={left:f.position.left+f.width/2,top:f.position.top+f.height/2};else{for(;d>0&&e>0&&i>0&&j>0;)for(d=Math.floor(d/2),e=Math.floor(e/2),b.x===L?i=d:b.x===N?i=f.width-d:i+=Math.floor(d/2),b.y===K?j=e:b.y===M?j=f.height-e:j+=Math.floor(e/2),g=h.length;g--&&!(h.length<2);)k=h[g][0]-f.position.left,l=h[g][1]-f.position.top,(b.x===L&&k>=i||b.x===N&&i>=k||b.x===O&&(i>k||k>f.width-i)||b.y===K&&l>=j||b.y===M&&j>=l||b.y===O&&(j>l||l>f.height-j))&&h.splice(g,1);f.position={left:h[0][0],top:h[0][1]}}return f},rect:function(a,b,c,d){return{width:Math.abs(c-a),height:Math.abs(d-b),position:{left:Math.min(a,c),top:Math.min(b,d)}}},_angles:{tc:1.5,tr:7/4,tl:5/4,bc:.5,br:.25,bl:.75,rc:2,lc:1,c:0},ellipse:function(a,b,c,d,e){var f=R.polys._angles[e.abbrev()],g=0===f?0:c*Math.cos(f*Math.PI),h=d*Math.sin(f*Math.PI);return{width:2*c-Math.abs(g),height:2*d-Math.abs(h),position:{left:a+g,top:b+h},adjustable:E}},circle:function(a,b,c,d){return R.polys.ellipse(a,b,c,c,d)}},R.svg=function(a,c,e){for(var f,g,h,i,j,k,l,m,n,o=(d(b),c[0]),p=d(o.ownerSVGElement),q=o.ownerDocument,r=(parseInt(c.css("stroke-width"),10)||0)/2;!o.getBBox;)o=o.parentNode;if(!o.getBBox||!o.parentNode)return E;switch(o.nodeName){case"ellipse":case"circle":m=R.polys.ellipse(o.cx.baseVal.value,o.cy.baseVal.value,(o.rx||o.r).baseVal.value+r,(o.ry||o.r).baseVal.value+r,e);break;case"line":case"polygon":case"polyline":for(l=o.points||[{x:o.x1.baseVal.value,y:o.y1.baseVal.value},{x:o.x2.baseVal.value,y:o.y2.baseVal.value}],m=[],k=-1,i=l.numberOfItems||l.length;++k<i;)j=l.getItem?l.getItem(k):l[k],m.push.apply(m,[j.x,j.y]);m=R.polys.polygon(m,e);break;default:m=o.getBBox(),m={width:m.width,height:m.height,position:{left:m.x,top:m.y}}}return n=m.position,p=p[0],p.createSVGPoint&&(g=o.getScreenCTM(),l=p.createSVGPoint(),l.x=n.left,l.y=n.top,h=l.matrixTransform(g),n.left=h.x,n.top=h.y),q!==b&&"mouse"!==a.position.target&&(f=d((q.defaultView||q.parentWindow).frameElement).offset(),f&&(n.left+=f.left,n.top+=f.top)),q=d(q),n.left+=q.scrollLeft(),n.top+=q.scrollTop(),m},R.imagemap=function(a,b,c){b.jquery||(b=d(b));var e,f,g,h,i,j=(b.attr("shape")||"rect").toLowerCase().replace("poly","polygon"),k=d('img[usemap="#'+b.parent("map").attr("name")+'"]'),l=d.trim(b.attr("coords")),m=l.replace(/,$/,"").split(",");if(!k.length)return E;if("polygon"===j)h=R.polys.polygon(m,c);else{if(!R.polys[j])return E;for(g=-1,i=m.length,f=[];++g<i;)f.push(parseInt(m[g],10));h=R.polys[j].apply(this,f.concat(c))}return e=k.offset(),e.left+=Math.ceil((k.outerWidth(E)-k.width())/2),e.top+=Math.ceil((k.outerHeight(E)-k.height())/2),h.position.left+=e.left,h.position.top+=e.top,h};var Ab,Bb='<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';" style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>';d.extend(x.prototype,{_scroll:function(){var b=this.qtip.elements.overlay;b&&(b[0].style.top=d(a).scrollTop()+"px")},init:function(c){var e=c.tooltip;d("select, object").length<1&&(this.bgiframe=c.elements.bgiframe=d(Bb).appendTo(e),c._bind(e,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=d("<div/>",{id:S+"-rcontainer"}).appendTo(b.body),c.elements.overlay&&c.elements.overlay.addClass("qtipmodal-ie6fix")&&(c._bind(a,["scroll","resize"],this._scroll,this._ns,this),c._bind(e,["tooltipshow"],this._scroll,this._ns,this)),this.redraw()},adjustBGIFrame:function(){var a,b,c=this.qtip.tooltip,d={height:c.outerHeight(E),width:c.outerWidth(E)},e=this.qtip.plugins.tip,f=this.qtip.elements.tip;b=parseInt(c.css("borderLeftWidth"),10)||0,b={left:-b,top:-b},e&&f&&(a="x"===e.corner.precedance?[I,L]:[J,K],b[a[1]]-=f[a[0]]()),this.bgiframe.css(b).css(d)},redraw:function(){if(this.qtip.rendered<1||this.drawing)return this;var a,b,c,d,e=this.qtip.tooltip,f=this.qtip.options.style,g=this.qtip.options.position.container;return this.qtip.drawing=1,f.height&&e.css(J,f.height),f.width?e.css(I,f.width):(e.css(I,"").appendTo(this.redrawContainer),b=e.width(),1>b%2&&(b+=1),c=e.css("maxWidth")||"",d=e.css("minWidth")||"",a=(c+d).indexOf("%")>-1?g.width()/100:0,c=(c.indexOf("%")>-1?a:1)*parseInt(c,10)||b,d=(d.indexOf("%")>-1?a:1)*parseInt(d,10)||0,b=c+d?Math.min(Math.max(b,d),c):b,e.css(I,Math.round(b)).appendTo(g)),this.drawing=0,this},destroy:function(){this.bgiframe&&this.bgiframe.remove(),this.qtip._unbind([a,this.qtip.tooltip],this._ns)}}),Ab=R.ie6=function(a){return 6===db.ie?new x(a):E},Ab.initialize="render",B.ie6={"^content|style$":function(){this.redraw()}}})}(window,document);
5
  //# sourceMappingURL=jquery.qtip.min.js.map
assets/webfonts/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  //silent
1
+ <?php
2
  //silent
classes/class.constants.php CHANGED
@@ -1,6 +1,6 @@
1
- <?php
2
- defined("ABSPATH") || exit;
3
- class DUP_Constants
4
- {
5
- const ZIP_STRING_LIMIT = 70000; // Cutoff for using ZipArchive addtostring vs addfile
6
- }
1
+ <?php
2
+ defined("ABSPATH") || exit;
3
+ class DUP_Constants
4
+ {
5
+ const ZIP_STRING_LIMIT = 70000; // Cutoff for using ZipArchive addtostring vs addfile
6
+ }
classes/class.server.php CHANGED
@@ -173,7 +173,7 @@ class DUP_Server
173
  if (strcmp($max_execution_time, 'Off') == 0) {
174
  $max_execution_time_error_message = '$max_execution_time should not be'.$max_execution_time;
175
  } else {
176
- $max_execution_time_error_message = '$max_execution_time ('.$max_execution_time.') should not be lower than the DUPLICATOR_PRO_SCAN_TIMEOUT'.DUPLICATOR_PRO_SCAN_TIMEOUT;
177
  }
178
  self::logCheckFalse($php_test2, $max_execution_time_error_message);
179
 
173
  if (strcmp($max_execution_time, 'Off') == 0) {
174
  $max_execution_time_error_message = '$max_execution_time should not be'.$max_execution_time;
175
  } else {
176
+ $max_execution_time_error_message = '$max_execution_time ('.$max_execution_time.') should not be lower than the DUPLICATOR_SCAN_TIMEOUT'.DUPLICATOR_SCAN_TIMEOUT;
177
  }
178
  self::logCheckFalse($php_test2, $max_execution_time_error_message);
179
 
classes/host/class.godaddy.host.php CHANGED
@@ -1,15 +1,15 @@
1
- <?php
2
- defined("ABSPATH") or die("");
3
-
4
- class DUP_GoDaddy_Host {
5
- public static function init() {
6
- add_filter('duplicator_defaults_settings', array('DUP_GoDaddy_Host', 'defaultsSettings'));
7
- }
8
-
9
- public static function defaultsSettings($defaults) {
10
- $defaults['archive_build_mode'] = DUP_Archive_Build_Mode::DupArchive;
11
- return $defaults;
12
- }
13
- }
14
-
15
  DUP_GoDaddy_Host::init();
1
+ <?php
2
+ defined("ABSPATH") or die("");
3
+
4
+ class DUP_GoDaddy_Host {
5
+ public static function init() {
6
+ add_filter('duplicator_defaults_settings', array('DUP_GoDaddy_Host', 'defaultsSettings'));
7
+ }
8
+
9
+ public static function defaultsSettings($defaults) {
10
+ $defaults['archive_build_mode'] = DUP_Archive_Build_Mode::DupArchive;
11
+ return $defaults;
12
+ }
13
+ }
14
+
15
  DUP_GoDaddy_Host::init();
classes/host/class.wpengine.host.php CHANGED
@@ -1,34 +1,34 @@
1
- <?php
2
- defined("ABSPATH") or die("");
3
- // New encryption class
4
-
5
- class DUP_WPEngine_Host {
6
- public static function init() {
7
- add_filter('duplicator_installer_file_path', array('DUP_WPEngine_Host', 'installerFilePath'), 10, 1);
8
- add_filter('duplicator_global_file_filters_on', '__return_true');
9
- add_filter('duplicator_global_file_filters', array('DUP_WPEngine_Host', 'globalFileFilters'), 10, 1);
10
- add_filter('duplicator_defaults_settings', array('DUP_WPEngine_Host', 'defaultsSettings'));
11
- }
12
-
13
- public static function installerFilePath($path) {
14
- $path_info = pathinfo($path);
15
- $newPath = $path;
16
- if ('php' == $path_info['extension']) {
17
- $newPath = substr_replace($path, '.txt', -4);
18
- }
19
- return $newPath;
20
- }
21
-
22
- public static function globalFileFilters($files) {
23
- $files[] = wp_normalize_path(WP_CONTENT_DIR).'/mysql.sql';
24
- return $files;
25
- }
26
-
27
- public static function defaultsSettings($defaults) {
28
- $defaults['package_zip_flush'] = '1';
29
- return $defaults;
30
- }
31
-
32
- }
33
-
34
  DUP_WPEngine_Host::init();
1
+ <?php
2
+ defined("ABSPATH") or die("");
3
+ // New encryption class
4
+
5
+ class DUP_WPEngine_Host {
6
+ public static function init() {
7
+ add_filter('duplicator_installer_file_path', array('DUP_WPEngine_Host', 'installerFilePath'), 10, 1);
8
+ add_filter('duplicator_global_file_filters_on', '__return_true');
9
+ add_filter('duplicator_global_file_filters', array('DUP_WPEngine_Host', 'globalFileFilters'), 10, 1);
10
+ add_filter('duplicator_defaults_settings', array('DUP_WPEngine_Host', 'defaultsSettings'));
11
+ }
12
+
13
+ public static function installerFilePath($path) {
14
+ $path_info = pathinfo($path);
15
+ $newPath = $path;
16
+ if ('php' == $path_info['extension']) {
17
+ $newPath = substr_replace($path, '.txt', -4);
18
+ }
19
+ return $newPath;
20
+ }
21
+
22
+ public static function globalFileFilters($files) {
23
+ $files[] = wp_normalize_path(WP_CONTENT_DIR).'/mysql.sql';
24
+ return $files;
25
+ }
26
+
27
+ public static function defaultsSettings($defaults) {
28
+ $defaults['package_zip_flush'] = '1';
29
+ return $defaults;
30
+ }
31
+
32
+ }
33
+
34
  DUP_WPEngine_Host::init();
classes/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  //silent
1
+ <?php
2
  //silent
classes/package/duparchive/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  //silent
1
+ <?php
2
  //silent
classes/package/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  //silent
1
+ <?php
2
  //silent
classes/ui/class.ui.screen.base.php CHANGED
@@ -66,7 +66,7 @@ class DUP_UI_Screen
66
  if (isset($_wp_admin_css_colors[$colorScheme])) {
67
  return $_wp_admin_css_colors[$colorScheme];
68
  } else {
69
- return $_wp_admin_css_colors[array_key_first($_wp_admin_css_colors)];
70
  }
71
  }
72
 
66
  if (isset($_wp_admin_css_colors[$colorScheme])) {
67
  return $_wp_admin_css_colors[$colorScheme];
68
  } else {
69
+ return $_wp_admin_css_colors[DupLiteSnapLibUtil::arrayKeyFirst($_wp_admin_css_colors)];
70
  }
71
  }
72
 
classes/ui/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  //silent
1
+ <?php
2
  //silent
ctrls/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  //silent
1
+ <?php
2
  //silent
define.php CHANGED
@@ -4,8 +4,8 @@ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
4
  //Prevent directly browsing to the file
5
  if (function_exists('plugin_dir_url'))
6
  {
7
- define('DUPLICATOR_VERSION', '1.3.32');
8
- define('DUPLICATOR_VERSION_BUILD', '2020-05-05_07:00');
9
  define('DUPLICATOR_PLUGIN_URL', plugin_dir_url(__FILE__));
10
  define('DUPLICATOR_SITE_URL', get_site_url());
11
 
4
  //Prevent directly browsing to the file
5
  if (function_exists('plugin_dir_url'))
6
  {
7
+ define('DUPLICATOR_VERSION', '1.3.34');
8
+ define('DUPLICATOR_VERSION_BUILD', '2020-05-16_10:30');
9
  define('DUPLICATOR_PLUGIN_URL', plugin_dir_url(__FILE__));
10
  define('DUPLICATOR_SITE_URL', get_site_url());
11
 
duplicator.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Duplicator
4
  Plugin URI: https://snapcreek.com/duplicator/duplicator-free/
5
  Description: Migrate and backup a copy of your WordPress files and database. Duplicate and move a site from one location to another quickly.
6
- Version: 1.3.32
7
  Author: Snap Creek
8
  Author URI: http://www.snapcreek.com/duplicator/
9
  Text Domain: duplicator
3
  Plugin Name: Duplicator
4
  Plugin URI: https://snapcreek.com/duplicator/duplicator-free/
5
  Description: Migrate and backup a copy of your WordPress files and database. Duplicate and move a site from one location to another quickly.
6
+ Version: 1.3.34
7
  Author: Snap Creek
8
  Author URI: http://www.snapcreek.com/duplicator/
9
  Text Domain: duplicator
installer/dup-installer/assets/font-awesome/webfonts/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  //silent
1
+ <?php
2
  //silent
installer/dup-installer/classes/Crypt/Base.php CHANGED
@@ -1,2660 +1,2660 @@
1
- <?php
2
- defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
- /**
4
- * Base Class for all Crypt_* cipher classes
5
- *
6
- * PHP versions 4 and 5
7
- *
8
- * Internally for phpseclib developers:
9
- * If you plan to add a new cipher class, please note following rules:
10
- *
11
- * - The new Crypt_* cipher class should extend Crypt_Base
12
- *
13
- * - Following methods are then required to be overridden/overloaded:
14
- *
15
- * - _encryptBlock()
16
- *
17
- * - _decryptBlock()
18
- *
19
- * - _setupKey()
20
- *
21
- * - All other methods are optional to be overridden/overloaded
22
- *
23
- * - Look at the source code of the current ciphers how they extend Crypt_Base
24
- * and take one of them as a start up for the new cipher class.
25
- *
26
- * - Please read all the other comments/notes/hints here also for each class var/method
27
- *
28
- * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
29
- * of this software and associated documentation files (the "Software"), to deal
30
- * in the Software without restriction, including without limitation the rights
31
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
32
- * copies of the Software, and to permit persons to whom the Software is
33
- * furnished to do so, subject to the following conditions:
34
- *
35
- * The above copyright notice and this permission notice shall be included in
36
- * all copies or substantial portions of the Software.
37
- *
38
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
39
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
40
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
41
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
42
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
43
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
44
- * THE SOFTWARE.
45
- *
46
- * @category Crypt
47
- * @package Crypt_Base
48
- * @author Jim Wigginton <terrafrost@php.net>
49
- * @author Hans-Juergen Petrich <petrich@tronic-media.com>
50
- * @copyright 2007 Jim Wigginton
51
- * @license http://www.opensource.org/licenses/mit-license.html MIT License
52
- * @link http://phpseclib.sourceforge.net
53
- */
54
-
55
- /**#@+
56
- * @access public
57
- * @see self::encrypt()
58
- * @see self::decrypt()
59
- */
60
- /**
61
- * Encrypt / decrypt using the Counter mode.
62
- *
63
- * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
64
- *
65
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
66
- */
67
- define('CRYPT_MODE_CTR', -1);
68
- /**
69
- * Encrypt / decrypt using the Electronic Code Book mode.
70
- *
71
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
72
- */
73
- define('CRYPT_MODE_ECB', 1);
74
- /**
75
- * Encrypt / decrypt using the Code Book Chaining mode.
76
- *
77
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
78
- */
79
- define('CRYPT_MODE_CBC', 2);
80
- /**
81
- * Encrypt / decrypt using the Cipher Feedback mode.
82
- *
83
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29
84
- */
85
- define('CRYPT_MODE_CFB', 3);
86
- /**
87
- * Encrypt / decrypt using the Output Feedback mode.
88
- *
89
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29
90
- */
91
- define('CRYPT_MODE_OFB', 4);
92
- /**
93
- * Encrypt / decrypt using streaming mode.
94
- */
95
- define('CRYPT_MODE_STREAM', 5);
96
- /**#@-*/
97
-
98
- /**#@+
99
- * @access private
100
- * @see self::Crypt_Base()
101
- * @internal These constants are for internal use only
102
- */
103
- /**
104
- * Base value for the internal implementation $engine switch
105
- */
106
- define('CRYPT_ENGINE_INTERNAL', 1);
107
- /**
108
- * Base value for the mcrypt implementation $engine switch
109
- */
110
- define('CRYPT_ENGINE_MCRYPT', 2);
111
- /**
112
- * Base value for the OpenSSL implementation $engine switch
113
- */
114
- define('CRYPT_ENGINE_OPENSSL', 3);
115
- /**#@-*/
116
-
117
- /**
118
- * Base Class for all Crypt_* cipher classes
119
- *
120
- * @package Crypt_Base
121
- * @author Jim Wigginton <terrafrost@php.net>
122
- * @author Hans-Juergen Petrich <petrich@tronic-media.com>
123
- * @access public
124
- */
125
- class Crypt_Base
126
- {
127
- /**
128
- * The Encryption Mode
129
- *
130
- * @see self::Crypt_Base()
131
- * @var int
132
- * @access private
133
- */
134
- var $mode;
135
-
136
- /**
137
- * The Block Length of the block cipher
138
- *
139
- * @var int
140
- * @access private
141
- */
142
- var $block_size = 16;
143
-
144
- /**
145
- * The Key
146
- *
147
- * @see self::setKey()
148
- * @var string
149
- * @access private
150
- */
151
- var $key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
152
-
153
- /**
154
- * The Initialization Vector
155
- *
156
- * @see self::setIV()
157
- * @var string
158
- * @access private
159
- */
160
- var $iv;
161
-
162
- /**
163
- * A "sliding" Initialization Vector
164
- *
165
- * @see self::enableContinuousBuffer()
166
- * @see self::_clearBuffers()
167
- * @var string
168
- * @access private
169
- */
170
- var $encryptIV;
171
-
172
- /**
173
- * A "sliding" Initialization Vector
174
- *
175
- * @see self::enableContinuousBuffer()
176
- * @see self::_clearBuffers()
177
- * @var string
178
- * @access private
179
- */
180
- var $decryptIV;
181
-
182
- /**
183
- * Continuous Buffer status
184
- *
185
- * @see self::enableContinuousBuffer()
186
- * @var bool
187
- * @access private
188
- */
189
- var $continuousBuffer = false;
190
-
191
- /**
192
- * Encryption buffer for CTR, OFB and CFB modes
193
- *
194
- * @see self::encrypt()
195
- * @see self::_clearBuffers()
196
- * @var array
197
- * @access private
198
- */
199
- var $enbuffer;
200
-
201
- /**
202
- * Decryption buffer for CTR, OFB and CFB modes
203
- *
204
- * @see self::decrypt()
205
- * @see self::_clearBuffers()
206
- * @var array
207
- * @access private
208
- */
209
- var $debuffer;
210
-
211
- /**
212
- * mcrypt resource for encryption
213
- *
214
- * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
215
- * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
216
- *
217
- * @see self::encrypt()
218
- * @var resource
219
- * @access private
220
- */
221
- var $enmcrypt;
222
-
223
- /**
224
- * mcrypt resource for decryption
225
- *
226
- * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
227
- * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
228
- *
229
- * @see self::decrypt()
230
- * @var resource
231
- * @access private
232
- */
233
- var $demcrypt;
234
-
235
- /**
236
- * Does the enmcrypt resource need to be (re)initialized?
237
- *
238
- * @see Crypt_Twofish::setKey()
239
- * @see Crypt_Twofish::setIV()
240
- * @var bool
241
- * @access private
242
- */
243
- var $enchanged = true;
244
-
245
- /**
246
- * Does the demcrypt resource need to be (re)initialized?
247
- *
248
- * @see Crypt_Twofish::setKey()
249
- * @see Crypt_Twofish::setIV()
250
- * @var bool
251
- * @access private
252
- */
253
- var $dechanged = true;
254
-
255
- /**
256
- * mcrypt resource for CFB mode
257
- *
258
- * mcrypt's CFB mode, in (and only in) buffered context,
259
- * is broken, so phpseclib implements the CFB mode by it self,
260
- * even when the mcrypt php extension is available.
261
- *
262
- * In order to do the CFB-mode work (fast) phpseclib
263
- * use a separate ECB-mode mcrypt resource.
264
- *
265
- * @link http://phpseclib.sourceforge.net/cfb-demo.phps
266
- * @see self::encrypt()
267
- * @see self::decrypt()
268
- * @see self::_setupMcrypt()
269
- * @var resource
270
- * @access private
271
- */
272
- var $ecb;
273
-
274
- /**
275
- * Optimizing value while CFB-encrypting
276
- *
277
- * Only relevant if $continuousBuffer enabled
278
- * and $engine == CRYPT_ENGINE_MCRYPT
279
- *
280
- * It's faster to re-init $enmcrypt if
281
- * $buffer bytes > $cfb_init_len than
282
- * using the $ecb resource furthermore.
283
- *
284
- * This value depends of the chosen cipher
285
- * and the time it would be needed for it's
286
- * initialization [by mcrypt_generic_init()]
287
- * which, typically, depends on the complexity
288
- * on its internaly Key-expanding algorithm.
289
- *
290
- * @see self::encrypt()
291
- * @var int
292
- * @access private
293
- */
294
- var $cfb_init_len = 600;
295
-
296
- /**
297
- * Does internal cipher state need to be (re)initialized?
298
- *
299
- * @see self::setKey()
300
- * @see self::setIV()
301
- * @see self::disableContinuousBuffer()
302
- * @var bool
303
- * @access private
304
- */
305
- var $changed = true;
306
-
307
- /**
308
- * Padding status
309
- *
310
- * @see self::enablePadding()
311
- * @var bool
312
- * @access private
313
- */
314
- var $padding = true;
315
-
316
- /**
317
- * Is the mode one that is paddable?
318
- *
319
- * @see self::Crypt_Base()
320
- * @var bool
321
- * @access private
322
- */
323
- var $paddable = false;
324
-
325
- /**
326
- * Holds which crypt engine internaly should be use,
327
- * which will be determined automatically on __construct()
328
- *
329
- * Currently available $engines are:
330
- * - CRYPT_ENGINE_OPENSSL (very fast, php-extension: openssl, extension_loaded('openssl') required)
331
- * - CRYPT_ENGINE_MCRYPT (fast, php-extension: mcrypt, extension_loaded('mcrypt') required)
332
- * - CRYPT_ENGINE_INTERNAL (slower, pure php-engine, no php-extension required)
333
- *
334
- * @see self::_setEngine()
335
- * @see self::encrypt()
336
- * @see self::decrypt()
337
- * @var int
338
- * @access private
339
- */
340
- var $engine;
341
-
342
- /**
343
- * Holds the preferred crypt engine
344
- *
345
- * @see self::_setEngine()
346
- * @see self::setPreferredEngine()
347
- * @var int
348
- * @access private
349
- */
350
- var $preferredEngine;
351
-
352
- /**
353
- * The mcrypt specific name of the cipher
354
- *
355
- * Only used if $engine == CRYPT_ENGINE_MCRYPT
356
- *
357
- * @link http://www.php.net/mcrypt_module_open
358
- * @link http://www.php.net/mcrypt_list_algorithms
359
- * @see self::_setupMcrypt()
360
- * @var string
361
- * @access private
362
- */
363
- var $cipher_name_mcrypt;
364
-
365
- /**
366
- * The openssl specific name of the cipher
367
- *
368
- * Only used if $engine == CRYPT_ENGINE_OPENSSL
369
- *
370
- * @link http://www.php.net/openssl-get-cipher-methods
371
- * @var string
372
- * @access private
373
- */
374
- var $cipher_name_openssl;
375
-
376
- /**
377
- * The openssl specific name of the cipher in ECB mode
378
- *
379
- * If OpenSSL does not support the mode we're trying to use (CTR)
380
- * it can still be emulated with ECB mode.
381
- *
382
- * @link http://www.php.net/openssl-get-cipher-methods
383
- * @var string
384
- * @access private
385
- */
386
- var $cipher_name_openssl_ecb;
387
-
388
- /**
389
- * The default salt used by setPassword()
390
- *
391
- * @see self::setPassword()
392
- * @var string
393
- * @access private
394
- */
395
- var $password_default_salt = 'phpseclib/salt';
396
-
397
- /**
398
- * The namespace used by the cipher for its constants.
399
- *
400
- * ie: AES.php is using CRYPT_AES_MODE_* for its constants
401
- * so $const_namespace is AES
402
- *
403
- * DES.php is using CRYPT_DES_MODE_* for its constants
404
- * so $const_namespace is DES... and so on
405
- *
406
- * All CRYPT_<$const_namespace>_MODE_* are aliases of
407
- * the generic CRYPT_MODE_* constants, so both could be used
408
- * for each cipher.
409
- *
410
- * Example:
411
- * $aes = new Crypt_AES(CRYPT_AES_MODE_CFB); // $aes will operate in cfb mode
412
- * $aes = new Crypt_AES(CRYPT_MODE_CFB); // identical
413
- *
414
- * @see self::Crypt_Base()
415
- * @var string
416
- * @access private
417
- */
418
- var $const_namespace;
419
-
420
- /**
421
- * The name of the performance-optimized callback function
422
- *
423
- * Used by encrypt() / decrypt()
424
- * only if $engine == CRYPT_ENGINE_INTERNAL
425
- *
426
- * @see self::encrypt()
427
- * @see self::decrypt()
428
- * @see self::_setupInlineCrypt()
429
- * @see self::$use_inline_crypt
430
- * @var Callback
431
- * @access private
432
- */
433
- var $inline_crypt;
434
-
435
- /**
436
- * Holds whether performance-optimized $inline_crypt() can/should be used.
437
- *
438
- * @see self::encrypt()
439
- * @see self::decrypt()
440
- * @see self::inline_crypt
441
- * @var mixed
442
- * @access private
443
- */
444
- var $use_inline_crypt;
445
-
446
- /**
447
- * If OpenSSL can be used in ECB but not in CTR we can emulate CTR
448
- *
449
- * @see self::_openssl_ctr_process()
450
- * @var bool
451
- * @access private
452
- */
453
- var $openssl_emulate_ctr = false;
454
-
455
- /**
456
- * Determines what options are passed to openssl_encrypt/decrypt
457
- *
458
- * @see self::isValidEngine()
459
- * @var mixed
460
- * @access private
461
- */
462
- var $openssl_options;
463
-
464
- /**
465
- * Has the key length explicitly been set or should it be derived from the key, itself?
466
- *
467
- * @see self::setKeyLength()
468
- * @var bool
469
- * @access private
470
- */
471
- var $explicit_key_length = false;
472
-
473
- /**
474
- * Don't truncate / null pad key
475
- *
476
- * @see self::_clearBuffers()
477
- * @var bool
478
- * @access private
479
- */
480
- var $skip_key_adjustment = false;
481
-
482
- /**
483
- * Default Constructor.
484
- *
485
- * Determines whether or not the mcrypt extension should be used.
486
- *
487
- * $mode could be:
488
- *
489
- * - CRYPT_MODE_ECB
490
- *
491
- * - CRYPT_MODE_CBC
492
- *
493
- * - CRYPT_MODE_CTR
494
- *
495
- * - CRYPT_MODE_CFB
496
- *
497
- * - CRYPT_MODE_OFB
498
- *
499
- * (or the alias constants of the chosen cipher, for example for AES: CRYPT_AES_MODE_ECB or CRYPT_AES_MODE_CBC ...)
500
- *
501
- * If not explicitly set, CRYPT_MODE_CBC will be used.
502
- *
503
- * @param int $mode
504
- * @access public
505
- */
506
- function __construct($mode = CRYPT_MODE_CBC)
507
- {
508
- // $mode dependent settings
509
- switch ($mode) {
510
- case CRYPT_MODE_ECB:
511
- $this->paddable = true;
512
- $this->mode = CRYPT_MODE_ECB;
513
- break;
514
- case CRYPT_MODE_CTR:
515
- case CRYPT_MODE_CFB:
516
- case CRYPT_MODE_OFB:
517
- case CRYPT_MODE_STREAM:
518
- $this->mode = $mode;
519
- break;
520
- case CRYPT_MODE_CBC:
521
- default:
522
- $this->paddable = true;
523
- $this->mode = CRYPT_MODE_CBC;
524
- }
525
-
526
- $this->_setEngine();
527
-
528
- // Determining whether inline crypting can be used by the cipher
529
- if ($this->use_inline_crypt !== false) {
530
- $this->use_inline_crypt = version_compare(PHP_VERSION, '5.3.0') >= 0 || function_exists('create_function');
531
- }
532
- }
533
-
534
- /**
535
- * PHP4 compatible Default Constructor.
536
- *
537
- * @see self::__construct()
538
- * @param int $mode
539
- * @access public
540
- */
541
- function Crypt_Base($mode = CRYPT_MODE_CBC)
542
- {
543
- $this->__construct($mode);
544
- }
545
-
546
- /**
547
- * Sets the initialization vector. (optional)
548
- *
549
- * SetIV is not required when CRYPT_MODE_ECB (or ie for AES: CRYPT_AES_MODE_ECB) is being used. If not explicitly set, it'll be assumed
550
- * to be all zero's.
551
- *
552
- * @access public
553
- * @param string $iv
554
- * @internal Can be overwritten by a sub class, but does not have to be
555
- */
556
- function setIV($iv)
557
- {
558
- if ($this->mode == CRYPT_MODE_ECB) {
559
- return;
560
- }
561
-
562
- $this->iv = $iv;
563
- $this->changed = true;
564
- }
565
-
566
- /**
567
- * Sets the key length.
568
- *
569
- * Keys with explicitly set lengths need to be treated accordingly
570
- *
571
- * @access public
572
- * @param int $length
573
- */
574
- function setKeyLength($length)
575
- {
576
- $this->explicit_key_length = true;
577
- $this->changed = true;
578
- $this->_setEngine();
579
- }
580
-
581
- /**
582
- * Returns the current key length in bits
583
- *
584
- * @access public
585
- * @return int
586
- */
587
- function getKeyLength()
588
- {
589
- return $this->key_length << 3;
590
- }
591
-
592
- /**
593
- * Returns the current block length in bits
594
- *
595
- * @access public
596
- * @return int
597
- */
598
- function getBlockLength()
599
- {
600
- return $this->block_size << 3;
601
- }
602
-
603
- /**
604
- * Sets the key.
605
- *
606
- * The min/max length(s) of the key depends on the cipher which is used.
607
- * If the key not fits the length(s) of the cipher it will paded with null bytes
608
- * up to the closest valid key length. If the key is more than max length,
609
- * we trim the excess bits.
610
- *
611
- * If the key is not explicitly set, it'll be assumed to be all null bytes.
612
- *
613
- * @access public
614
- * @param string $key
615
- * @internal Could, but not must, extend by the child Crypt_* class
616
- */
617
- function setKey($key)
618
- {
619
- if (!$this->explicit_key_length) {
620
- $this->setKeyLength(strlen($key) << 3);
621
- $this->explicit_key_length = false;
622
- }
623
-
624
- $this->key = $key;
625
- $this->changed = true;
626
- $this->_setEngine();
627
- }
628
-
629
- /**
630
- * Sets the password.
631
- *
632
- * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows:
633
- * {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2} or pbkdf1:
634
- * $hash, $salt, $count, $dkLen
635
- *
636
- * Where $hash (default = sha1) currently supports the following hashes: see: Crypt/Hash.php
637
- *
638
- * @see Crypt/Hash.php
639
- * @param string $password
640
- * @param string $method
641
- * @return bool
642
- * @access public
643
- * @internal Could, but not must, extend by the child Crypt_* class
644
- */
645
- function setPassword($password, $method = 'pbkdf2')
646
- {
647
- $key = '';
648
-
649
- switch ($method) {
650
- default: // 'pbkdf2' or 'pbkdf1'
651
- $func_args = func_get_args();
652
-
653
- // Hash function
654
- $hash = isset($func_args[2]) ? $func_args[2] : 'sha1';
655
-
656
- // WPA and WPA2 use the SSID as the salt
657
- $salt = isset($func_args[3]) ? $func_args[3] : $this->password_default_salt;
658
-
659
- // RFC2898#section-4.2 uses 1,000 iterations by default
660
- // WPA and WPA2 use 4,096.
661
- $count = isset($func_args[4]) ? $func_args[4] : 1000;
662
-
663
- // Keylength
664
- if (isset($func_args[5]) && $func_args[5] > 0) {
665
- $dkLen = $func_args[5];
666
- } else {
667
- $dkLen = $method == 'pbkdf1' ? 2 * $this->key_length : $this->key_length;
668
- }
669
-
670
- switch (true) {
671
- case $method == 'pbkdf1':
672
- if (!class_exists('Crypt_Hash')) {
673
- include_once 'Crypt/Hash.php';
674
- }
675
- $hashObj = new Crypt_Hash();
676
- $hashObj->setHash($hash);
677
- if ($dkLen > $hashObj->getLength()) {
678
- user_error('Derived key too long');
679
- return false;
680
- }
681
- $t = $password . $salt;
682
- for ($i = 0; $i < $count; ++$i) {
683
- $t = $hashObj->hash($t);
684
- }
685
- $key = substr($t, 0, $dkLen);
686
-
687
- $this->setKey(substr($key, 0, $dkLen >> 1));
688
- $this->setIV(substr($key, $dkLen >> 1));
689
-
690
- return true;
691
- // Determining if php[>=5.5.0]'s hash_pbkdf2() function avail- and useable
692
- case !function_exists('hash_pbkdf2'):
693
- case !function_exists('hash_algos'):
694
- case !in_array($hash, hash_algos()):
695
- if (!class_exists('Crypt_Hash')) {
696
- include_once 'Crypt/Hash.php';
697
- }
698
- $i = 1;
699
- $hmac = new Crypt_Hash();
700
- $hmac->setHash($hash);
701
- $hmac->setKey($password);
702
- while (strlen($key) < $dkLen) {
703
- $f = $u = $hmac->hash($salt . pack('N', $i++));
704
- for ($j = 2; $j <= $count; ++$j) {
705
- $u = $hmac->hash($u);
706
- $f^= $u;
707
- }
708
- $key.= $f;
709
- }
710
- $key = substr($key, 0, $dkLen);
711
- break;
712
- default:
713
- $key = hash_pbkdf2($hash, $password, $salt, $count, $dkLen, true);
714
- }
715
- }
716
-
717
- $this->setKey($key);
718
-
719
- return true;
720
- }
721
-
722
- /**
723
- * Encrypts a message.
724
- *
725
- * $plaintext will be padded with additional bytes such that it's length is a multiple of the block size. Other cipher
726
- * implementations may or may not pad in the same manner. Other common approaches to padding and the reasons why it's
727
- * necessary are discussed in the following
728
- * URL:
729
- *
730
- * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
731
- *
732
- * An alternative to padding is to, separately, send the length of the file. This is what SSH, in fact, does.
733
- * strlen($plaintext) will still need to be a multiple of the block size, however, arbitrary values can be added to make it that
734
- * length.
735
- *
736
- * @see self::decrypt()
737
- * @access public
738
- * @param string $plaintext
739
- * @return string $ciphertext
740
- * @internal Could, but not must, extend by the child Crypt_* class
741
- */
742
- function encrypt($plaintext)
743
- {
744
- if ($this->paddable) {
745
- $plaintext = $this->_pad($plaintext);
746
- }
747
-
748
- if ($this->engine === CRYPT_ENGINE_OPENSSL) {
749
- if ($this->changed) {
750
- $this->_clearBuffers();
751
- $this->changed = false;
752
- }
753
- switch ($this->mode) {
754
- case CRYPT_MODE_STREAM:
755
- return openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
756
- case CRYPT_MODE_ECB:
757
- $result = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
758
- return !defined('OPENSSL_RAW_DATA') ? substr($result, 0, -$this->block_size) : $result;
759
- case CRYPT_MODE_CBC:
760
- $result = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->encryptIV);
761
- if (!defined('OPENSSL_RAW_DATA')) {
762
- $result = substr($result, 0, -$this->block_size);
763
- }
764
- if ($this->continuousBuffer) {
765
- $this->encryptIV = substr($result, -$this->block_size);
766
- }
767
- return $result;
768
- case CRYPT_MODE_CTR:
769
- return $this->_openssl_ctr_process($plaintext, $this->encryptIV, $this->enbuffer);
770
- case CRYPT_MODE_CFB:
771
- // cfb loosely routines inspired by openssl's:
772
- // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
773
- $ciphertext = '';
774
- if ($this->continuousBuffer) {
775
- $iv = &$this->encryptIV;
776
- $pos = &$this->enbuffer['pos'];
777
- } else {
778
- $iv = $this->encryptIV;
779
- $pos = 0;
780
- }
781
- $len = strlen($plaintext);
782
- $i = 0;
783
- if ($pos) {
784
- $orig_pos = $pos;
785
- $max = $this->block_size - $pos;
786
- if ($len >= $max) {
787
- $i = $max;
788
- $len-= $max;
789
- $pos = 0;
790
- } else {
791
- $i = $len;
792
- $pos+= $len;
793
- $len = 0;
794
- }
795
- // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
796
- $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
797
- $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
798
- $plaintext = substr($plaintext, $i);
799
- }
800
-
801
- $overflow = $len % $this->block_size;
802
-
803
- if ($overflow) {
804
- $ciphertext.= openssl_encrypt(substr($plaintext, 0, -$overflow) . str_repeat("\0", $this->block_size), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
805
- $iv = $this->_string_pop($ciphertext, $this->block_size);
806
-
807
- $size = $len - $overflow;
808
- $block = $iv ^ substr($plaintext, -$overflow);
809
- $iv = substr_replace($iv, $block, 0, $overflow);
810
- $ciphertext.= $block;
811
- $pos = $overflow;
812
- } elseif ($len) {
813
- $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
814
- $iv = substr($ciphertext, -$this->block_size);
815
- }
816
-
817
- return $ciphertext;
818
- case CRYPT_MODE_OFB:
819
- return $this->_openssl_ofb_process($plaintext, $this->encryptIV, $this->enbuffer);
820
- }
821
- }
822
-
823
- if ($this->engine === CRYPT_ENGINE_MCRYPT) {
824
- if ($this->changed) {
825
- $this->_setupMcrypt();
826
- $this->changed = false;
827
- }
828
- if ($this->enchanged) {
829
- @mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
830
- $this->enchanged = false;
831
- }
832
-
833
- // re: {@link http://phpseclib.sourceforge.net/cfb-demo.phps}
834
- // using mcrypt's default handing of CFB the above would output two different things. using phpseclib's
835
- // rewritten CFB implementation the above outputs the same thing twice.
836
- if ($this->mode == CRYPT_MODE_CFB && $this->continuousBuffer) {
837
- $block_size = $this->block_size;
838
- $iv = &$this->encryptIV;
839
- $pos = &$this->enbuffer['pos'];
840
- $len = strlen($plaintext);
841
- $ciphertext = '';
842
- $i = 0;
843
- if ($pos) {
844
- $orig_pos = $pos;
845
- $max = $block_size - $pos;
846
- if ($len >= $max) {
847
- $i = $max;
848
- $len-= $max;
849
- $pos = 0;
850
- } else {
851
- $i = $len;
852
- $pos+= $len;
853
- $len = 0;
854
- }
855
- $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
856
- $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
857
- $this->enbuffer['enmcrypt_init'] = true;
858
- }
859
- if ($len >= $block_size) {
860
- if ($this->enbuffer['enmcrypt_init'] === false || $len > $this->cfb_init_len) {
861
- if ($this->enbuffer['enmcrypt_init'] === true) {
862
- @mcrypt_generic_init($this->enmcrypt, $this->key, $iv);
863
- $this->enbuffer['enmcrypt_init'] = false;
864
- }
865
- $ciphertext.= @mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % $block_size));
866
- $iv = substr($ciphertext, -$block_size);
867
- $len%= $block_size;
868
- } else {
869
- while ($len >= $block_size) {
870
- $iv = @mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, $block_size);
871
- $ciphertext.= $iv;
872
- $len-= $block_size;
873
- $i+= $block_size;
874
- }
875
- }
876
- }
877
-
878
- if ($len) {
879
- $iv = @mcrypt_generic($this->ecb, $iv);
880
- $block = $iv ^ substr($plaintext, -$len);
881
- $iv = substr_replace($iv, $block, 0, $len);
882
- $ciphertext.= $block;
883
- $pos = $len;
884
- }
885
-
886
- return $ciphertext;
887
- }
888
-
889
- $ciphertext = @mcrypt_generic($this->enmcrypt, $plaintext);
890
-
891
- if (!$this->continuousBuffer) {
892
- @mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
893
- }
894
-
895
- return $ciphertext;
896
- }
897
-
898
- if ($this->changed) {
899
- $this->_setup();
900
- $this->changed = false;
901
- }
902
- if ($this->use_inline_crypt) {
903
- $inline = $this->inline_crypt;
904
- return $inline('encrypt', $this, $plaintext);
905
- }
906
-
907
- $buffer = &$this->enbuffer;
908
- $block_size = $this->block_size;
909
- $ciphertext = '';
910
- switch ($this->mode) {
911
- case CRYPT_MODE_ECB:
912
- for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
913
- $ciphertext.= $this->_encryptBlock(substr($plaintext, $i, $block_size));
914
- }
915
- break;
916
- case CRYPT_MODE_CBC:
917
- $xor = $this->encryptIV;
918
- for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
919
- $block = substr($plaintext, $i, $block_size);
920
- $block = $this->_encryptBlock($block ^ $xor);
921
- $xor = $block;
922
- $ciphertext.= $block;
923
- }
924
- if ($this->continuousBuffer) {
925
- $this->encryptIV = $xor;
926
- }
927
- break;
928
- case CRYPT_MODE_CTR:
929
- $xor = $this->encryptIV;
930
- if (strlen($buffer['ciphertext'])) {
931
- for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
932
- $block = substr($plaintext, $i, $block_size);
933
- if (strlen($block) > strlen($buffer['ciphertext'])) {
934
- $buffer['ciphertext'].= $this->_encryptBlock($xor);
935
- }
936
- $this->_increment_str($xor);
937
- $key = $this->_string_shift($buffer['ciphertext'], $block_size);
938
- $ciphertext.= $block ^ $key;
939
- }
940
- } else {
941
- for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
942
- $block = substr($plaintext, $i, $block_size);
943
- $key = $this->_encryptBlock($xor);
944
- $this->_increment_str($xor);
945
- $ciphertext.= $block ^ $key;
946
- }
947
- }
948
- if ($this->continuousBuffer) {
949
- $this->encryptIV = $xor;
950
- if ($start = strlen($plaintext) % $block_size) {
951
- $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
952
- }
953
- }
954
- break;
955
- case CRYPT_MODE_CFB:
956
- // cfb loosely routines inspired by openssl's:
957
- // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
958
- if ($this->continuousBuffer) {
959
- $iv = &$this->encryptIV;
960
- $pos = &$buffer['pos'];
961
- } else {
962
- $iv = $this->encryptIV;
963
- $pos = 0;
964
- }
965
- $len = strlen($plaintext);
966
- $i = 0;
967
- if ($pos) {
968
- $orig_pos = $pos;
969
- $max = $block_size - $pos;
970
- if ($len >= $max) {
971
- $i = $max;
972
- $len-= $max;
973
- $pos = 0;
974
- } else {
975
- $i = $len;
976
- $pos+= $len;
977
- $len = 0;
978
- }
979
- // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
980
- $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
981
- $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
982
- }
983
- while ($len >= $block_size) {
984
- $iv = $this->_encryptBlock($iv) ^ substr($plaintext, $i, $block_size);
985
- $ciphertext.= $iv;
986
- $len-= $block_size;
987
- $i+= $block_size;
988
- }
989
- if ($len) {
990
- $iv = $this->_encryptBlock($iv);
991
- $block = $iv ^ substr($plaintext, $i);
992
- $iv = substr_replace($iv, $block, 0, $len);
993
- $ciphertext.= $block;
994
- $pos = $len;
995
- }
996
- break;
997
- case CRYPT_MODE_OFB:
998
- $xor = $this->encryptIV;
999
- if (strlen($buffer['xor'])) {
1000
- for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
1001
- $block = substr($plaintext, $i, $block_size);
1002
- if (strlen($block) > strlen($buffer['xor'])) {
1003
- $xor = $this->_encryptBlock($xor);
1004
- $buffer['xor'].= $xor;
1005
- }
1006
- $key = $this->_string_shift($buffer['xor'], $block_size);
1007
- $ciphertext.= $block ^ $key;
1008
- }
1009
- } else {
1010
- for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
1011
- $xor = $this->_encryptBlock($xor);
1012
- $ciphertext.= substr($plaintext, $i, $block_size) ^ $xor;
1013
- }
1014
- $key = $xor;
1015
- }
1016
- if ($this->continuousBuffer) {
1017
- $this->encryptIV = $xor;
1018
- if ($start = strlen($plaintext) % $block_size) {
1019
- $buffer['xor'] = substr($key, $start) . $buffer['xor'];
1020
- }
1021
- }
1022
- break;
1023
- case CRYPT_MODE_STREAM:
1024
- $ciphertext = $this->_encryptBlock($plaintext);
1025
- break;
1026
- }
1027
-
1028
- return $ciphertext;
1029
- }
1030
-
1031
- /**
1032
- * Decrypts a message.
1033
- *
1034
- * If strlen($ciphertext) is not a multiple of the block size, null bytes will be added to the end of the string until
1035
- * it is.
1036
- *
1037
- * @see self::encrypt()
1038
- * @access public
1039
- * @param string $ciphertext
1040
- * @return string $plaintext
1041
- * @internal Could, but not must, extend by the child Crypt_* class
1042
- */
1043
- function decrypt($ciphertext)
1044
- {
1045
- if ($this->paddable) {
1046
- // we pad with chr(0) since that's what mcrypt_generic does. to quote from {@link http://www.php.net/function.mcrypt-generic}:
1047
- // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
1048
- $ciphertext = str_pad($ciphertext, strlen($ciphertext) + ($this->block_size - strlen($ciphertext) % $this->block_size) % $this->block_size, chr(0));
1049
- }
1050
-
1051
- if ($this->engine === CRYPT_ENGINE_OPENSSL) {
1052
- if ($this->changed) {
1053
- $this->_clearBuffers();
1054
- $this->changed = false;
1055
- }
1056
- switch ($this->mode) {
1057
- case CRYPT_MODE_STREAM:
1058
- $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
1059
- break;
1060
- case CRYPT_MODE_ECB:
1061
- if (!defined('OPENSSL_RAW_DATA')) {
1062
- $ciphertext.= openssl_encrypt('', $this->cipher_name_openssl_ecb, $this->key, true);
1063
- }
1064
- $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
1065
- break;
1066
- case CRYPT_MODE_CBC:
1067
- if (!defined('OPENSSL_RAW_DATA')) {
1068
- $padding = str_repeat(chr($this->block_size), $this->block_size) ^ substr($ciphertext, -$this->block_size);
1069
- $ciphertext.= substr(openssl_encrypt($padding, $this->cipher_name_openssl_ecb, $this->key, true), 0, $this->block_size);
1070
- $offset = 2 * $this->block_size;
1071
- } else {
1072
- $offset = $this->block_size;
1073
- }
1074
- $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->decryptIV);
1075
- if ($this->continuousBuffer) {
1076
- $this->decryptIV = substr($ciphertext, -$offset, $this->block_size);
1077
- }
1078
- break;
1079
- case CRYPT_MODE_CTR:
1080
- $plaintext = $this->_openssl_ctr_process($ciphertext, $this->decryptIV, $this->debuffer);
1081
- break;
1082
- case CRYPT_MODE_CFB:
1083
- // cfb loosely routines inspired by openssl's:
1084
- // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
1085
- $plaintext = '';
1086
- if ($this->continuousBuffer) {
1087
- $iv = &$this->decryptIV;
1088
- $pos = &$this->buffer['pos'];
1089
- } else {
1090
- $iv = $this->decryptIV;
1091
- $pos = 0;
1092
- }
1093
- $len = strlen($ciphertext);
1094
- $i = 0;
1095
- if ($pos) {
1096
- $orig_pos = $pos;
1097
- $max = $this->block_size - $pos;
1098
- if ($len >= $max) {
1099
- $i = $max;
1100
- $len-= $max;
1101
- $pos = 0;
1102
- } else {
1103
- $i = $len;
1104
- $pos+= $len;
1105
- $len = 0;
1106
- }
1107
- // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $this->blocksize
1108
- $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
1109
- $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
1110
- $ciphertext = substr($ciphertext, $i);
1111
- }
1112
- $overflow = $len % $this->block_size;
1113
- if ($overflow) {
1114
- $plaintext.= openssl_decrypt(substr($ciphertext, 0, -$overflow), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
1115
- if ($len - $overflow) {
1116
- $iv = substr($ciphertext, -$overflow - $this->block_size, -$overflow);
1117
- }
1118
- $iv = openssl_encrypt(str_repeat("\0", $this->block_size), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
1119
- $plaintext.= $iv ^ substr($ciphertext, -$overflow);
1120
- $iv = substr_replace($iv, substr($ciphertext, -$overflow), 0, $overflow);
1121
- $pos = $overflow;
1122
- } elseif ($len) {
1123
- $plaintext.= openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
1124
- $iv = substr($ciphertext, -$this->block_size);
1125
- }
1126
- break;
1127
- case CRYPT_MODE_OFB:
1128
- $plaintext = $this->_openssl_ofb_process($ciphertext, $this->decryptIV, $this->debuffer);
1129
- }
1130
-
1131
- return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
1132
- }
1133
-
1134
- if ($this->engine === CRYPT_ENGINE_MCRYPT) {
1135
- $block_size = $this->block_size;
1136
- if ($this->changed) {
1137
- $this->_setupMcrypt();
1138
- $this->changed = false;
1139
- }
1140
- if ($this->dechanged) {
1141
- @mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
1142
- $this->dechanged = false;
1143
- }
1144
-
1145
- if ($this->mode == CRYPT_MODE_CFB && $this->continuousBuffer) {
1146
- $iv = &$this->decryptIV;
1147
- $pos = &$this->debuffer['pos'];
1148
- $len = strlen($ciphertext);
1149
- $plaintext = '';
1150
- $i = 0;
1151
- if ($pos) {
1152
- $orig_pos = $pos;
1153
- $max = $block_size - $pos;
1154
- if ($len >= $max) {
1155
- $i = $max;
1156
- $len-= $max;
1157
- $pos = 0;
1158
- } else {
1159
- $i = $len;
1160
- $pos+= $len;
1161
- $len = 0;
1162
- }
1163
- // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
1164
- $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
1165
- $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
1166
- }
1167
- if ($len >= $block_size) {
1168
- $cb = substr($ciphertext, $i, $len - $len % $block_size);
1169
- $plaintext.= @mcrypt_generic($this->ecb, $iv . $cb) ^ $cb;
1170
- $iv = substr($cb, -$block_size);
1171
- $len%= $block_size;
1172
- }
1173
- if ($len) {
1174
- $iv = @mcrypt_generic($this->ecb, $iv);
1175
- $plaintext.= $iv ^ substr($ciphertext, -$len);
1176
- $iv = substr_replace($iv, substr($ciphertext, -$len), 0, $len);
1177
- $pos = $len;
1178
- }
1179
-
1180
- return $plaintext;
1181
- }
1182
-
1183
- $plaintext = @mdecrypt_generic($this->demcrypt, $ciphertext);
1184
-
1185
- if (!$this->continuousBuffer) {
1186
- @mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
1187
- }
1188
-
1189
- return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
1190
- }
1191
-
1192
- if ($this->changed) {
1193
- $this->_setup();
1194
- $this->changed = false;
1195
- }
1196
- if ($this->use_inline_crypt) {
1197
- $inline = $this->inline_crypt;
1198
- return $inline('decrypt', $this, $ciphertext);
1199
- }
1200
-
1201
- $block_size = $this->block_size;
1202
-
1203
- $buffer = &$this->debuffer;
1204
- $plaintext = '';
1205
- switch ($this->mode) {
1206
- case CRYPT_MODE_ECB:
1207
- for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
1208
- $plaintext.= $this->_decryptBlock(substr($ciphertext, $i, $block_size));
1209
- }
1210
- break;
1211
- case CRYPT_MODE_CBC:
1212
- $xor = $this->decryptIV;
1213
- for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
1214
- $block = substr($ciphertext, $i, $block_size);
1215
- $plaintext.= $this->_decryptBlock($block) ^ $xor;
1216
- $xor = $block;
1217
- }
1218
- if ($this->continuousBuffer) {
1219
- $this->decryptIV = $xor;
1220
- }
1221
- break;
1222
- case CRYPT_MODE_CTR:
1223
- $xor = $this->decryptIV;
1224
- if (strlen($buffer['ciphertext'])) {
1225
- for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
1226
- $block = substr($ciphertext, $i, $block_size);
1227
- if (strlen($block) > strlen($buffer['ciphertext'])) {
1228
- $buffer['ciphertext'].= $this->_encryptBlock($xor);
1229
- $this->_increment_str($xor);
1230
- }
1231
- $key = $this->_string_shift($buffer['ciphertext'], $block_size);
1232
- $plaintext.= $block ^ $key;
1233
- }
1234
- } else {
1235
- for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
1236
- $block = substr($ciphertext, $i, $block_size);
1237
- $key = $this->_encryptBlock($xor);
1238
- $this->_increment_str($xor);
1239
- $plaintext.= $block ^ $key;
1240
- }
1241
- }
1242
- if ($this->continuousBuffer) {
1243
- $this->decryptIV = $xor;
1244
- if ($start = strlen($ciphertext) % $block_size) {
1245
- $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
1246
- }
1247
- }
1248
- break;
1249
- case CRYPT_MODE_CFB:
1250
- if ($this->continuousBuffer) {
1251
- $iv = &$this->decryptIV;
1252
- $pos = &$buffer['pos'];
1253
- } else {
1254
- $iv = $this->decryptIV;
1255
- $pos = 0;
1256
- }
1257
- $len = strlen($ciphertext);
1258
- $i = 0;
1259
- if ($pos) {
1260
- $orig_pos = $pos;
1261
- $max = $block_size - $pos;
1262
- if ($len >= $max) {
1263
- $i = $max;
1264
- $len-= $max;
1265
- $pos = 0;
1266
- } else {
1267
- $i = $len;
1268
- $pos+= $len;
1269
- $len = 0;
1270
- }
1271
- // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
1272
- $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
1273
- $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
1274
- }
1275
- while ($len >= $block_size) {
1276
- $iv = $this->_encryptBlock($iv);
1277
- $cb = substr($ciphertext, $i, $block_size);
1278
- $plaintext.= $iv ^ $cb;
1279
- $iv = $cb;
1280
- $len-= $block_size;
1281
- $i+= $block_size;
1282
- }
1283
- if ($len) {
1284
- $iv = $this->_encryptBlock($iv);
1285
- $plaintext.= $iv ^ substr($ciphertext, $i);
1286
- $iv = substr_replace($iv, substr($ciphertext, $i), 0, $len);
1287
- $pos = $len;
1288
- }
1289
- break;
1290
- case CRYPT_MODE_OFB:
1291
- $xor = $this->decryptIV;
1292
- if (strlen($buffer['xor'])) {
1293
- for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
1294
- $block = substr($ciphertext, $i, $block_size);
1295
- if (strlen($block) > strlen($buffer['xor'])) {
1296
- $xor = $this->_encryptBlock($xor);
1297
- $buffer['xor'].= $xor;
1298
- }
1299
- $key = $this->_string_shift($buffer['xor'], $block_size);
1300
- $plaintext.= $block ^ $key;
1301
- }
1302
- } else {
1303
- for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
1304
- $xor = $this->_encryptBlock($xor);
1305
- $plaintext.= substr($ciphertext, $i, $block_size) ^ $xor;
1306
- }
1307
- $key = $xor;
1308
- }
1309
- if ($this->continuousBuffer) {
1310
- $this->decryptIV = $xor;
1311
- if ($start = strlen($ciphertext) % $block_size) {
1312
- $buffer['xor'] = substr($key, $start) . $buffer['xor'];
1313
- }
1314
- }
1315
- break;
1316
- case CRYPT_MODE_STREAM:
1317
- $plaintext = $this->_decryptBlock($ciphertext);
1318
- break;
1319
- }
1320
- return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
1321
- }
1322
-
1323
- /**
1324
- * OpenSSL CTR Processor
1325
- *
1326
- * PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream
1327
- * for CTR is the same for both encrypting and decrypting this function is re-used by both Crypt_Base::encrypt()
1328
- * and Crypt_Base::decrypt(). Also, OpenSSL doesn't implement CTR for all of it's symmetric ciphers so this
1329
- * function will emulate CTR with ECB when necessary.
1330
- *
1331
- * @see self::encrypt()
1332
- * @see self::decrypt()
1333
- * @param string $plaintext
1334
- * @param string $encryptIV
1335
- * @param array $buffer
1336
- * @return string
1337
- * @access private
1338
- */
1339
- function _openssl_ctr_process($plaintext, &$encryptIV, &$buffer)
1340
- {
1341
- $ciphertext = '';
1342
-
1343
- $block_size = $this->block_size;
1344
- $key = $this->key;
1345
-
1346
- if ($this->openssl_emulate_ctr) {
1347
- $xor = $encryptIV;
1348
- if (strlen($buffer['ciphertext'])) {
1349
- for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
1350
- $block = substr($plaintext, $i, $block_size);
1351
- if (strlen($block) > strlen($buffer['ciphertext'])) {
1352
- $result = openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
1353
- $result = !defined('OPENSSL_RAW_DATA') ? substr($result, 0, -$this->block_size) : $result;
1354
- $buffer['ciphertext'].= $result;
1355
- }
1356
- $this->_increment_str($xor);
1357
- $otp = $this->_string_shift($buffer['ciphertext'], $block_size);
1358
- $ciphertext.= $block ^ $otp;
1359
- }
1360
- } else {
1361
- for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
1362
- $block = substr($plaintext, $i, $block_size);
1363
- $otp = openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
1364
- $otp = !defined('OPENSSL_RAW_DATA') ? substr($otp, 0, -$this->block_size) : $otp;
1365
- $this->_increment_str($xor);
1366
- $ciphertext.= $block ^ $otp;
1367
- }
1368
- }
1369
- if ($this->continuousBuffer) {
1370
- $encryptIV = $xor;
1371
- if ($start = strlen($plaintext) % $block_size) {
1372
- $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
1373
- }
1374
- }
1375
-
1376
- return $ciphertext;
1377
- }
1378
-
1379
- if (strlen($buffer['ciphertext'])) {
1380
- $ciphertext = $plaintext ^ $this->_string_shift($buffer['ciphertext'], strlen($plaintext));
1381
- $plaintext = substr($plaintext, strlen($ciphertext));
1382
-
1383
- if (!strlen($plaintext)) {
1384
- return $ciphertext;
1385
- }
1386
- }
1387
-
1388
- $overflow = strlen($plaintext) % $block_size;
1389
- if ($overflow) {
1390
- $plaintext2 = $this->_string_pop($plaintext, $overflow); // ie. trim $plaintext to a multiple of $block_size and put rest of $plaintext in $plaintext2
1391
- $encrypted = openssl_encrypt($plaintext . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
1392
- $temp = $this->_string_pop($encrypted, $block_size);
1393
- $ciphertext.= $encrypted . ($plaintext2 ^ $temp);
1394
- if ($this->continuousBuffer) {
1395
- $buffer['ciphertext'] = substr($temp, $overflow);
1396
- $encryptIV = $temp;
1397
- }
1398
- } elseif (!strlen($buffer['ciphertext'])) {
1399
- $ciphertext.= openssl_encrypt($plaintext . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
1400
- $temp = $this->_string_pop($ciphertext, $block_size);
1401
- if ($this->continuousBuffer) {
1402
- $encryptIV = $temp;
1403
- }
1404
- }
1405
- if ($this->continuousBuffer) {
1406
- if (!defined('OPENSSL_RAW_DATA')) {
1407
- $encryptIV.= openssl_encrypt('', $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
1408
- }
1409
- $encryptIV = openssl_decrypt($encryptIV, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
1410
- if ($overflow) {
1411
- $this->_increment_str($encryptIV);
1412
- }
1413
- }
1414
-
1415
- return $ciphertext;
1416
- }
1417
-
1418
- /**
1419
- * OpenSSL OFB Processor
1420
- *
1421
- * PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream
1422
- * for OFB is the same for both encrypting and decrypting this function is re-used by both Crypt_Base::encrypt()
1423
- * and Crypt_Base::decrypt().
1424
- *
1425
- * @see self::encrypt()
1426
- * @see self::decrypt()
1427
- * @param string $plaintext
1428
- * @param string $encryptIV
1429
- * @param array $buffer
1430
- * @return string
1431
- * @access private
1432
- */
1433
- function _openssl_ofb_process($plaintext, &$encryptIV, &$buffer)
1434
- {
1435
- if (strlen($buffer['xor'])) {
1436
- $ciphertext = $plaintext ^ $buffer['xor'];
1437
- $buffer['xor'] = substr($buffer['xor'], strlen($ciphertext));
1438
- $plaintext = substr($plaintext, strlen($ciphertext));
1439
- } else {
1440
- $ciphertext = '';
1441
- }
1442
-
1443
- $block_size = $this->block_size;
1444
-
1445
- $len = strlen($plaintext);
1446
- $key = $this->key;
1447
- $overflow = $len % $block_size;
1448
-
1449
- if (strlen($plaintext)) {
1450
- if ($overflow) {
1451
- $ciphertext.= openssl_encrypt(substr($plaintext, 0, -$overflow) . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
1452
- $xor = $this->_string_pop($ciphertext, $block_size);
1453
- if ($this->continuousBuffer) {
1454
- $encryptIV = $xor;
1455
- }
1456
- $ciphertext.= $this->_string_shift($xor, $overflow) ^ substr($plaintext, -$overflow);
1457
- if ($this->continuousBuffer) {
1458
- $buffer['xor'] = $xor;
1459
- }
1460
- } else {
1461
- $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
1462
- if ($this->continuousBuffer) {
1463
- $encryptIV = substr($ciphertext, -$block_size) ^ substr($plaintext, -$block_size);
1464
- }
1465
- }
1466
- }
1467
-
1468
- return $ciphertext;
1469
- }
1470
-
1471
- /**
1472
- * phpseclib <-> OpenSSL Mode Mapper
1473
- *
1474
- * May need to be overwritten by classes extending this one in some cases
1475
- *
1476
- * @return int
1477
- * @access private
1478
- */
1479
- function _openssl_translate_mode()
1480
- {
1481
- switch ($this->mode) {
1482
- case CRYPT_MODE_ECB:
1483
- return 'ecb';
1484
- case CRYPT_MODE_CBC:
1485
- return 'cbc';
1486
- case CRYPT_MODE_CTR:
1487
- return 'ctr';
1488
- case CRYPT_MODE_CFB:
1489
- return 'cfb';
1490
- case CRYPT_MODE_OFB:
1491
- return 'ofb';
1492
- }
1493
- }
1494
-
1495
- /**
1496
- * Pad "packets".
1497
- *
1498
- * Block ciphers working by encrypting between their specified [$this->]block_size at a time
1499
- * If you ever need to encrypt or decrypt something that isn't of the proper length, it becomes necessary to
1500
- * pad the input so that it is of the proper length.
1501
- *
1502
- * Padding is enabled by default. Sometimes, however, it is undesirable to pad strings. Such is the case in SSH,
1503
- * where "packets" are padded with random bytes before being encrypted. Unpad these packets and you risk stripping
1504
- * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
1505
- * transmitted separately)
1506
- *
1507
- * @see self::disablePadding()
1508
- * @access public
1509
- */
1510
- function enablePadding()
1511
- {
1512
- $this->padding = true;
1513
- }
1514
-
1515
- /**
1516
- * Do not pad packets.
1517
- *
1518
- * @see self::enablePadding()
1519
- * @access public
1520
- */
1521
- function disablePadding()
1522
- {
1523
- $this->padding = false;
1524
- }
1525
-
1526
- /**
1527
- * Treat consecutive "packets" as if they are a continuous buffer.
1528
- *
1529
- * Say you have a 32-byte plaintext $plaintext. Using the default behavior, the two following code snippets
1530
- * will yield different outputs:
1531
- *
1532
- * <code>
1533
- * echo $rijndael->encrypt(substr($plaintext, 0, 16));
1534
- * echo $rijndael->encrypt(substr($plaintext, 16, 16));
1535
- * </code>
1536
- * <code>
1537
- * echo $rijndael->encrypt($plaintext);
1538
- * </code>
1539
- *
1540
- * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates
1541
- * another, as demonstrated with the following:
1542
- *
1543
- * <code>
1544
- * $rijndael->encrypt(substr($plaintext, 0, 16));
1545
- * echo $rijndael->decrypt($rijndael->encrypt(substr($plaintext, 16, 16)));
1546
- * </code>
1547
- * <code>
1548
- * echo $rijndael->decrypt($rijndael->encrypt(substr($plaintext, 16, 16)));
1549
- * </code>
1550
- *
1551
- * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different
1552
- * outputs. The reason is due to the fact that the initialization vector's change after every encryption /
1553
- * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant.
1554
- *
1555
- * Put another way, when the continuous buffer is enabled, the state of the Crypt_*() object changes after each
1556
- * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that
1557
- * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them),
1558
- * however, they are also less intuitive and more likely to cause you problems.
1559
- *
1560
- * @see self::disableContinuousBuffer()
1561
- * @access public
1562
- * @internal Could, but not must, extend by the child Crypt_* class
1563
- */
1564
- function enableContinuousBuffer()
1565
- {
1566
- if ($this->mode == CRYPT_MODE_ECB) {
1567
- return;
1568
- }
1569
-
1570
- $this->continuousBuffer = true;
1571
-
1572
- $this->_setEngine();
1573
- }
1574
-
1575
- /**
1576
- * Treat consecutive packets as if they are a discontinuous buffer.
1577
- *
1578
- * The default behavior.
1579
- *
1580
- * @see self::enableContinuousBuffer()
1581
- * @access public
1582
- * @internal Could, but not must, extend by the child Crypt_* class
1583
- */
1584
- function disableContinuousBuffer()
1585
- {
1586
- if ($this->mode == CRYPT_MODE_ECB) {
1587
- return;
1588
- }
1589
- if (!$this->continuousBuffer) {
1590
- return;
1591
- }
1592
-
1593
- $this->continuousBuffer = false;
1594
- $this->changed = true;
1595
-
1596
- $this->_setEngine();
1597
- }
1598
-
1599
- /**
1600
- * Test for engine validity
1601
- *
1602
- * @see self::Crypt_Base()
1603
- * @param int $engine
1604
- * @access public
1605
- * @return bool
1606
- */
1607
- function isValidEngine($engine)
1608
- {
1609
- switch ($engine) {
1610
- case CRYPT_ENGINE_OPENSSL:
1611
- if ($this->mode == CRYPT_MODE_STREAM && $this->continuousBuffer) {
1612
- return false;
1613
- }
1614
- $this->openssl_emulate_ctr = false;
1615
- $result = $this->cipher_name_openssl &&
1616
- extension_loaded('openssl') &&
1617
- // PHP 5.3.0 - 5.3.2 did not let you set IV's
1618
- version_compare(PHP_VERSION, '5.3.3', '>=');
1619
- if (!$result) {
1620
- return false;
1621
- }
1622
-
1623
- // prior to PHP 5.4.0 OPENSSL_RAW_DATA and OPENSSL_ZERO_PADDING were not defined. instead of expecting an integer
1624
- // $options openssl_encrypt expected a boolean $raw_data.
1625
- if (!defined('OPENSSL_RAW_DATA')) {
1626
- $this->openssl_options = true;
1627
- } else {
1628
- $this->openssl_options = OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING;
1629
- }
1630
-
1631
- $methods = openssl_get_cipher_methods();
1632
- if (in_array($this->cipher_name_openssl, $methods)) {
1633
- return true;
1634
- }
1635
- // not all of openssl's symmetric cipher's support ctr. for those
1636
- // that don't we'll emulate it
1637
- switch ($this->mode) {
1638
- case CRYPT_MODE_CTR:
1639
- if (in_array($this->cipher_name_openssl_ecb, $methods)) {
1640
- $this->openssl_emulate_ctr = true;
1641
- return true;
1642
- }
1643
- }
1644
- return false;
1645
- case CRYPT_ENGINE_MCRYPT:
1646
- return $this->cipher_name_mcrypt &&
1647
- extension_loaded('mcrypt') &&
1648
- in_array($this->cipher_name_mcrypt, @mcrypt_list_algorithms());
1649
- case CRYPT_ENGINE_INTERNAL:
1650
- return true;
1651
- }
1652
-
1653
- return false;
1654
- }
1655
-
1656
- /**
1657
- * Sets the preferred crypt engine
1658
- *
1659
- * Currently, $engine could be:
1660
- *
1661
- * - CRYPT_ENGINE_OPENSSL [very fast]
1662
- *
1663
- * - CRYPT_ENGINE_MCRYPT [fast]
1664
- *
1665
- * - CRYPT_ENGINE_INTERNAL [slow]
1666
- *
1667
- * If the preferred crypt engine is not available the fastest available one will be used
1668
- *
1669
- * @see self::Crypt_Base()
1670
- * @param int $engine
1671
- * @access public
1672
- */
1673
- function setPreferredEngine($engine)
1674
- {
1675
- switch ($engine) {
1676
- //case CRYPT_ENGINE_OPENSSL:
1677
- case CRYPT_ENGINE_MCRYPT:
1678
- case CRYPT_ENGINE_INTERNAL:
1679
- $this->preferredEngine = $engine;
1680
- break;
1681
- default:
1682
- $this->preferredEngine = CRYPT_ENGINE_OPENSSL;
1683
- }
1684
-
1685
- $this->_setEngine();
1686
- }
1687
-
1688
- /**
1689
- * Returns the engine currently being utilized
1690
- *
1691
- * @see self::_setEngine()
1692
- * @access public
1693
- */
1694
- function getEngine()
1695
- {
1696
- return $this->engine;
1697
- }
1698
-
1699
- /**
1700
- * Sets the engine as appropriate
1701
- *
1702
- * @see self::Crypt_Base()
1703
- * @access private
1704
- */
1705
- function _setEngine()
1706
- {
1707
- $this->engine = null;
1708
-
1709
- $candidateEngines = array(
1710
- $this->preferredEngine,
1711
- CRYPT_ENGINE_OPENSSL,
1712
- CRYPT_ENGINE_MCRYPT
1713
- );
1714
- foreach ($candidateEngines as $engine) {
1715
- if ($this->isValidEngine($engine)) {
1716
- $this->engine = $engine;
1717
- break;
1718
- }
1719
- }
1720
- if (!$this->engine) {
1721
- $this->engine = CRYPT_ENGINE_INTERNAL;
1722
- }
1723
-
1724
- if ($this->engine != CRYPT_ENGINE_MCRYPT && $this->enmcrypt) {
1725
- // Closing the current mcrypt resource(s). _mcryptSetup() will, if needed,
1726
- // (re)open them with the module named in $this->cipher_name_mcrypt
1727
- @mcrypt_module_close($this->enmcrypt);
1728
- @mcrypt_module_close($this->demcrypt);
1729
- $this->enmcrypt = null;
1730
- $this->demcrypt = null;
1731
-
1732
- if ($this->ecb) {
1733
- @mcrypt_module_close($this->ecb);
1734
- $this->ecb = null;
1735
- }
1736
- }
1737
-
1738
- $this->changed = true;
1739
- }
1740
-
1741
- /**
1742
- * Encrypts a block
1743
- *
1744
- * @access private
1745
- * @param string $in
1746
- * @return string
1747
- * @internal Must be extended by the child Crypt_* class
1748
- */
1749
- function _encryptBlock($in)
1750
- {
1751
- user_error((version_compare(PHP_VERSION, '5.0.0', '>=') ? __METHOD__ : __FUNCTION__) . '() must extend by class ' . get_class($this), E_USER_ERROR);
1752
- }
1753
-
1754
- /**
1755
- * Decrypts a block
1756
- *
1757
- * @access private
1758
- * @param string $in
1759
- * @return string
1760
- * @internal Must be extended by the child Crypt_* class
1761
- */
1762
- function _decryptBlock($in)
1763
- {
1764
- user_error((version_compare(PHP_VERSION, '5.0.0', '>=') ? __METHOD__ : __FUNCTION__) . '() must extend by class ' . get_class($this), E_USER_ERROR);
1765
- }
1766
-
1767
- /**
1768
- * Setup the key (expansion)
1769
- *
1770
- * Only used if $engine == CRYPT_ENGINE_INTERNAL
1771
- *
1772
- * @see self::_setup()
1773
- * @access private
1774
- * @internal Must be extended by the child Crypt_* class
1775
- */
1776
- function _setupKey()
1777
- {
1778
- user_error((version_compare(PHP_VERSION, '5.0.0', '>=') ? __METHOD__ : __FUNCTION__) . '() must extend by class ' . get_class($this), E_USER_ERROR);
1779
- }
1780
-
1781
- /**
1782
- * Setup the CRYPT_ENGINE_INTERNAL $engine
1783
- *
1784
- * (re)init, if necessary, the internal cipher $engine and flush all $buffers
1785
- * Used (only) if $engine == CRYPT_ENGINE_INTERNAL
1786
- *
1787
- * _setup() will be called each time if $changed === true
1788
- * typically this happens when using one or more of following public methods:
1789
- *
1790
- * - setKey()
1791
- *
1792
- * - setIV()
1793
- *
1794
- * - disableContinuousBuffer()
1795
- *
1796
- * - First run of encrypt() / decrypt() with no init-settings
1797
- *
1798
- * @see self::setKey()
1799
- * @see self::setIV()
1800
- * @see self::disableContinuousBuffer()
1801
- * @access private
1802
- * @internal _setup() is always called before en/decryption.
1803
- * @internal Could, but not must, extend by the child Crypt_* class
1804
- */
1805
- function _setup()
1806
- {
1807
- $this->_clearBuffers();
1808
- $this->_setupKey();
1809
-
1810
- if ($this->use_inline_crypt) {
1811
- $this->_setupInlineCrypt();
1812
- }
1813
- }
1814
-
1815
- /**
1816
- * Setup the CRYPT_ENGINE_MCRYPT $engine
1817
- *
1818
- * (re)init, if necessary, the (ext)mcrypt resources and flush all $buffers
1819
- * Used (only) if $engine = CRYPT_ENGINE_MCRYPT
1820
- *
1821
- * _setupMcrypt() will be called each time if $changed === true
1822
- * typically this happens when using one or more of following public methods:
1823
- *
1824
- * - setKey()
1825
- *
1826
- * - setIV()
1827
- *
1828
- * - disableContinuousBuffer()
1829
- *
1830
- * - First run of encrypt() / decrypt()
1831
- *
1832
- * @see self::setKey()
1833
- * @see self::setIV()
1834
- * @see self::disableContinuousBuffer()
1835
- * @access private
1836
- * @internal Could, but not must, extend by the child Crypt_* class
1837
- */
1838
- function _setupMcrypt()
1839
- {
1840
- $this->_clearBuffers();
1841
- $this->enchanged = $this->dechanged = true;
1842
-
1843
- if (!isset($this->enmcrypt)) {
1844
- static $mcrypt_modes = array(
1845
- CRYPT_MODE_CTR => 'ctr',
1846
- CRYPT_MODE_ECB => MCRYPT_MODE_ECB,
1847
- CRYPT_MODE_CBC => MCRYPT_MODE_CBC,
1848
- CRYPT_MODE_CFB => 'ncfb',
1849
- CRYPT_MODE_OFB => MCRYPT_MODE_NOFB,
1850
- CRYPT_MODE_STREAM => MCRYPT_MODE_STREAM,
1851
- );
1852
-
1853
- $this->demcrypt = @mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');
1854
- $this->enmcrypt = @mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');
1855
-
1856
- // we need the $ecb mcrypt resource (only) in MODE_CFB with enableContinuousBuffer()
1857
- // to workaround mcrypt's broken ncfb implementation in buffered mode
1858
- // see: {@link http://phpseclib.sourceforge.net/cfb-demo.phps}
1859
- if ($this->mode == CRYPT_MODE_CFB) {
1860
- $this->ecb = @mcrypt_module_open($this->cipher_name_mcrypt, '', MCRYPT_MODE_ECB, '');
1861
- }
1862
- } // else should mcrypt_generic_deinit be called?
1863
-
1864
- if ($this->mode == CRYPT_MODE_CFB) {
1865
- @mcrypt_generic_init($this->ecb, $this->key, str_repeat("\0", $this->block_size));
1866
- }
1867
- }
1868
-
1869
- /**
1870
- * Pads a string
1871
- *
1872
- * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize.
1873
- * $this->block_size - (strlen($text) % $this->block_size) bytes are added, each of which is equal to
1874
- * chr($this->block_size - (strlen($text) % $this->block_size)
1875
- *
1876
- * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
1877
- * and padding will, hence forth, be enabled.
1878
- *
1879
- * @see self::_unpad()
1880
- * @param string $text
1881
- * @access private
1882
- * @return string
1883
- */
1884
- function _pad($text)
1885
- {
1886
- $length = strlen($text);
1887
-
1888
- if (!$this->padding) {
1889
- if ($length % $this->block_size == 0) {
1890
- return $text;
1891
- } else {
1892
- user_error("The plaintext's length ($length) is not a multiple of the block size ({$this->block_size})");
1893
- $this->padding = true;
1894
- }
1895
- }
1896
-
1897
- $pad = $this->block_size - ($length % $this->block_size);
1898
-
1899
- return str_pad($text, $length + $pad, chr($pad));
1900
- }
1901
-
1902
- /**
1903
- * Unpads a string.
1904
- *
1905
- * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
1906
- * and false will be returned.
1907
- *
1908
- * @see self::_pad()
1909
- * @param string $text
1910
- * @access private
1911
- * @return string
1912
- */
1913
- function _unpad($text)
1914
- {
1915
- if (!$this->padding) {
1916
- return $text;
1917
- }
1918
-
1919
- $length = ord($text[strlen($text) - 1]);
1920
-
1921
- if (!$length || $length > $this->block_size) {
1922
- return false;
1923
- }
1924
-
1925
- return substr($text, 0, -$length);
1926
- }
1927
-
1928
- /**
1929
- * Clears internal buffers
1930
- *
1931
- * Clearing/resetting the internal buffers is done everytime
1932
- * after disableContinuousBuffer() or on cipher $engine (re)init
1933
- * ie after setKey() or setIV()
1934
- *
1935
- * @access public
1936
- * @internal Could, but not must, extend by the child Crypt_* class
1937
- */
1938
- function _clearBuffers()
1939
- {
1940
- $this->enbuffer = $this->debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true);
1941
-
1942
- // mcrypt's handling of invalid's $iv:
1943
- // $this->encryptIV = $this->decryptIV = strlen($this->iv) == $this->block_size ? $this->iv : str_repeat("\0", $this->block_size);
1944
- $this->encryptIV = $this->decryptIV = str_pad(substr($this->iv, 0, $this->block_size), $this->block_size, "\0");
1945
-
1946
- if (!$this->skip_key_adjustment) {
1947
- $this->key = str_pad(substr($this->key, 0, $this->key_length), $this->key_length, "\0");
1948
- }
1949
- }
1950
-
1951
- /**
1952
- * String Shift
1953
- *
1954
- * Inspired by array_shift
1955
- *
1956
- * @param string $string
1957
- * @param int $index
1958
- * @access private
1959
- * @return string
1960
- */
1961
- function _string_shift(&$string, $index = 1)
1962
- {
1963
- $substr = substr($string, 0, $index);
1964
- $string = substr($string, $index);
1965
- return $substr;
1966
- }
1967
-
1968
- /**
1969
- * String Pop
1970
- *
1971
- * Inspired by array_pop
1972
- *
1973
- * @param string $string
1974
- * @param int $index
1975
- * @access private
1976
- * @return string
1977
- */
1978
- function _string_pop(&$string, $index = 1)
1979
- {
1980
- $substr = substr($string, -$index);
1981
- $string = substr($string, 0, -$index);
1982
- return $substr;
1983
- }
1984
-
1985
- /**
1986
- * Increment the current string
1987
- *
1988
- * @see self::decrypt()
1989
- * @see self::encrypt()
1990
- * @param string $var
1991
- * @access private
1992
- */
1993
- function _increment_str(&$var)
1994
- {
1995
- for ($i = 4; $i <= strlen($var); $i+= 4) {
1996
- $temp = substr($var, -$i, 4);
1997
- switch ($temp) {
1998
- case "\xFF\xFF\xFF\xFF":
1999
- $var = substr_replace($var, "\x00\x00\x00\x00", -$i, 4);
2000
- break;
2001
- case "\x7F\xFF\xFF\xFF":
2002
- $var = substr_replace($var, "\x80\x00\x00\x00", -$i, 4);
2003
- return;
2004
- default:
2005
- $temp = unpack('Nnum', $temp);
2006
- $var = substr_replace($var, pack('N', $temp['num'] + 1), -$i, 4);
2007
- return;
2008
- }
2009
- }
2010
-
2011
- $remainder = strlen($var) % 4;
2012
-
2013
- if ($remainder == 0) {
2014
- return;
2015
- }
2016
-
2017
- $temp = unpack('Nnum', str_pad(substr($var, 0, $remainder), 4, "\0", STR_PAD_LEFT));
2018
- $temp = substr(pack('N', $temp['num'] + 1), -$remainder);
2019
- $var = substr_replace($var, $temp, 0, $remainder);
2020
- }
2021
-
2022
- /**
2023
- * Setup the performance-optimized function for de/encrypt()
2024
- *
2025
- * Stores the created (or existing) callback function-name
2026
- * in $this->inline_crypt
2027
- *
2028
- * Internally for phpseclib developers:
2029
- *
2030
- * _setupInlineCrypt() would be called only if:
2031
- *
2032
- * - $engine == CRYPT_ENGINE_INTERNAL and
2033
- *
2034
- * - $use_inline_crypt === true
2035
- *
2036
- * - each time on _setup(), after(!) _setupKey()
2037
- *
2038
- *
2039
- * This ensures that _setupInlineCrypt() has always a
2040
- * full ready2go initializated internal cipher $engine state
2041
- * where, for example, the keys allready expanded,
2042
- * keys/block_size calculated and such.
2043
- *
2044
- * It is, each time if called, the responsibility of _setupInlineCrypt():
2045
- *
2046
- * - to set $this->inline_crypt to a valid and fully working callback function
2047
- * as a (faster) replacement for encrypt() / decrypt()
2048
- *
2049
- * - NOT to create unlimited callback functions (for memory reasons!)
2050
- * no matter how often _setupInlineCrypt() would be called. At some
2051
- * point of amount they must be generic re-useable.
2052
- *
2053
- * - the code of _setupInlineCrypt() it self,
2054
- * and the generated callback code,
2055
- * must be, in following order:
2056
- * - 100% safe
2057
- * - 100% compatible to encrypt()/decrypt()
2058
- * - using only php5+ features/lang-constructs/php-extensions if
2059
- * compatibility (down to php4) or fallback is provided
2060
- * - readable/maintainable/understandable/commented and... not-cryptic-styled-code :-)
2061
- * - >= 10% faster than encrypt()/decrypt() [which is, by the way,
2062
- * the reason for the existence of _setupInlineCrypt() :-)]
2063
- * - memory-nice
2064
- * - short (as good as possible)
2065
- *
2066
- * Note: - _setupInlineCrypt() is using _createInlineCryptFunction() to create the full callback function code.
2067
- * - In case of using inline crypting, _setupInlineCrypt() must extend by the child Crypt_* class.
2068
- * - The following variable names are reserved:
2069
- * - $_* (all variable names prefixed with an underscore)
2070
- * - $self (object reference to it self. Do not use $this, but $self instead)
2071
- * - $in (the content of $in has to en/decrypt by the generated code)
2072
- * - The callback function should not use the 'return' statement, but en/decrypt'ing the content of $in only
2073
- *
2074
- *
2075
- * @see self::_setup()
2076
- * @see self::_createInlineCryptFunction()
2077
- * @see self::encrypt()
2078
- * @see self::decrypt()
2079
- * @access private
2080
- * @internal If a Crypt_* class providing inline crypting it must extend _setupInlineCrypt()
2081
- */
2082
- function _setupInlineCrypt()
2083
- {
2084
- // If, for any reason, an extending Crypt_Base() Crypt_* class
2085
- // not using inline crypting then it must be ensured that: $this->use_inline_crypt = false
2086
- // ie in the class var declaration of $use_inline_crypt in general for the Crypt_* class,
2087
- // in the constructor at object instance-time
2088
- // or, if it's runtime-specific, at runtime
2089
-
2090
- $this->use_inline_crypt = false;
2091
- }
2092
-
2093
- /**
2094
- * Creates the performance-optimized function for en/decrypt()
2095
- *
2096
- * Internally for phpseclib developers:
2097
- *
2098
- * _createInlineCryptFunction():
2099
- *
2100
- * - merge the $cipher_code [setup'ed by _setupInlineCrypt()]
2101
- * with the current [$this->]mode of operation code
2102
- *
2103
- * - create the $inline function, which called by encrypt() / decrypt()
2104
- * as its replacement to speed up the en/decryption operations.
2105
- *
2106
- * - return the name of the created $inline callback function
2107
- *
2108
- * - used to speed up en/decryption
2109
- *
2110
- *
2111
- *
2112
- * The main reason why can speed up things [up to 50%] this way are:
2113
- *
2114
- * - using variables more effective then regular.
2115
- * (ie no use of expensive arrays but integers $k_0, $k_1 ...
2116
- * or even, for example, the pure $key[] values hardcoded)
2117
- *
2118
- * - avoiding 1000's of function calls of ie _encryptBlock()
2119
- * but inlining the crypt operations.
2120
- * in the mode of operation for() loop.
2121
- *
2122
- * - full loop unroll the (sometimes key-dependent) rounds
2123
- * avoiding this way ++$i counters and runtime-if's etc...
2124
- *
2125
- * The basic code architectur of the generated $inline en/decrypt()
2126
- * lambda function, in pseudo php, is:
2127
- *
2128
- * <code>
2129
- * +----------------------------------------------------------------------------------------------+
2130
- * | callback $inline = create_function: |
2131
- * | lambda_function_0001_crypt_ECB($action, $text) |
2132
- * | { |
2133
- * | INSERT PHP CODE OF: |
2134
- * | $cipher_code['init_crypt']; // general init code. |
2135
- * | // ie: $sbox'es declarations used for |
2136
- * | // encrypt and decrypt'ing. |
2137
- * | |
2138
- * | switch ($action) { |
2139
- * | case 'encrypt': |
2140
- * | INSERT PHP CODE OF: |
2141
- * | $cipher_code['init_encrypt']; // encrypt sepcific init code. |
2142
- * | ie: specified $key or $box |
2143
- * | declarations for encrypt'ing. |
2144
- * | |
2145
- * | foreach ($ciphertext) { |
2146
- * | $in = $block_size of $ciphertext; |
2147
- * | |
2148
- * | INSERT PHP CODE OF: |
2149
- * | $cipher_code['encrypt_block']; // encrypt's (string) $in, which is always: |
2150
- * | // strlen($in) == $this->block_size |
2151
- * | // here comes the cipher algorithm in action |
2152
- * | // for encryption. |
2153
- * | // $cipher_code['encrypt_block'] has to |
2154
- * | // encrypt the content of the $in variable |
2155
- * | |
2156
- * | $plaintext .= $in; |
2157
- * | } |
2158
- * | return $plaintext; |
2159
- * | |
2160
- * | case 'decrypt': |
2161
- * | INSERT PHP CODE OF: |
2162
- * | $cipher_code['init_decrypt']; // decrypt sepcific init code |
2163
- * | ie: specified $key or $box |
2164
- * | declarations for decrypt'ing. |
2165
- * | foreach ($plaintext) { |
2166
- * | $in = $block_size of $plaintext; |
2167
- * | |
2168
- * | INSERT PHP CODE OF: |
2169
- * | $cipher_code['decrypt_block']; // decrypt's (string) $in, which is always |
2170
- * | // strlen($in) == $this->block_size |
2171
- * | // here comes the cipher algorithm in action |
2172
- * | // for decryption. |
2173
- * | // $cipher_code['decrypt_block'] has to |
2174
- * | // decrypt the content of the $in variable |
2175
- * | $ciphertext .= $in; |
2176
- * | } |
2177
- * | return $ciphertext; |
2178
- * | } |
2179
- * | } |
2180
- * +----------------------------------------------------------------------------------------------+
2181
- * </code>
2182
- *
2183
- * See also the Crypt_*::_setupInlineCrypt()'s for
2184
- * productive inline $cipher_code's how they works.
2185
- *
2186
- * Structure of:
2187
- * <code>
2188
- * $cipher_code = array(
2189
- * 'init_crypt' => (string) '', // optional
2190
- * 'init_encrypt' => (string) '', // optional
2191
- * 'init_decrypt' => (string) '', // optional
2192
- * 'encrypt_block' => (string) '', // required
2193
- * 'decrypt_block' => (string) '' // required
2194
- * );
2195
- * </code>
2196
- *
2197
- * @see self::_setupInlineCrypt()
2198
- * @see self::encrypt()
2199
- * @see self::decrypt()
2200
- * @param array $cipher_code
2201
- * @access private
2202
- * @return string (the name of the created callback function)
2203
- */
2204
- function _createInlineCryptFunction($cipher_code)
2205
- {
2206
- $block_size = $this->block_size;
2207
-
2208
- // optional
2209
- $init_crypt = isset($cipher_code['init_crypt']) ? $cipher_code['init_crypt'] : '';
2210
- $init_encrypt = isset($cipher_code['init_encrypt']) ? $cipher_code['init_encrypt'] : '';
2211
- $init_decrypt = isset($cipher_code['init_decrypt']) ? $cipher_code['init_decrypt'] : '';
2212
- // required
2213
- $encrypt_block = $cipher_code['encrypt_block'];
2214
- $decrypt_block = $cipher_code['decrypt_block'];
2215
-
2216
- // Generating mode of operation inline code,
2217
- // merged with the $cipher_code algorithm
2218
- // for encrypt- and decryption.
2219
- switch ($this->mode) {
2220
- case CRYPT_MODE_ECB:
2221
- $encrypt = $init_encrypt . '
2222
- $_ciphertext = "";
2223
- $_plaintext_len = strlen($_text);
2224
-
2225
- for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
2226
- $in = substr($_text, $_i, '.$block_size.');
2227
- '.$encrypt_block.'
2228
- $_ciphertext.= $in;
2229
- }
2230
-
2231
- return $_ciphertext;
2232
- ';
2233
-
2234
- $decrypt = $init_decrypt . '
2235
- $_plaintext = "";
2236
- $_text = str_pad($_text, strlen($_text) + ('.$block_size.' - strlen($_text) % '.$block_size.') % '.$block_size.', chr(0));
2237
- $_ciphertext_len = strlen($_text);
2238
-
2239
- for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
2240
- $in = substr($_text, $_i, '.$block_size.');
2241
- '.$decrypt_block.'
2242
- $_plaintext.= $in;
2243
- }
2244
-
2245
- return $self->_unpad($_plaintext);
2246
- ';
2247
- break;
2248
- case CRYPT_MODE_CTR:
2249
- $encrypt = $init_encrypt . '
2250
- $_ciphertext = "";
2251
- $_plaintext_len = strlen($_text);
2252
- $_xor = $self->encryptIV;
2253
- $_buffer = &$self->enbuffer;
2254
- if (strlen($_buffer["ciphertext"])) {
2255
- for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
2256
- $_block = substr($_text, $_i, '.$block_size.');
2257
- if (strlen($_block) > strlen($_buffer["ciphertext"])) {
2258
- $in = $_xor;
2259
- '.$encrypt_block.'
2260
- $self->_increment_str($_xor);
2261
- $_buffer["ciphertext"].= $in;
2262
- }
2263
- $_key = $self->_string_shift($_buffer["ciphertext"], '.$block_size.');
2264
- $_ciphertext.= $_block ^ $_key;
2265
- }
2266
- } else {
2267
- for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
2268
- $_block = substr($_text, $_i, '.$block_size.');
2269
- $in = $_xor;
2270
- '.$encrypt_block.'
2271
- $self->_increment_str($_xor);
2272
- $_key = $in;
2273
- $_ciphertext.= $_block ^ $_key;
2274
- }
2275
- }
2276
- if ($self->continuousBuffer) {
2277
- $self->encryptIV = $_xor;
2278
- if ($_start = $_plaintext_len % '.$block_size.') {
2279
- $_buffer["ciphertext"] = substr($_key, $_start) . $_buffer["ciphertext"];
2280
- }
2281
- }
2282
-
2283
- return $_ciphertext;
2284
- ';
2285
-
2286
- $decrypt = $init_encrypt . '
2287
- $_plaintext = "";
2288
- $_ciphertext_len = strlen($_text);
2289
- $_xor = $self->decryptIV;
2290
- $_buffer = &$self->debuffer;
2291
-
2292
- if (strlen($_buffer["ciphertext"])) {
2293
- for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
2294
- $_block = substr($_text, $_i, '.$block_size.');
2295
- if (strlen($_block) > strlen($_buffer["ciphertext"])) {
2296
- $in = $_xor;
2297
- '.$encrypt_block.'
2298
- $self->_increment_str($_xor);
2299
- $_buffer["ciphertext"].= $in;
2300
- }
2301
- $_key = $self->_string_shift($_buffer["ciphertext"], '.$block_size.');
2302
- $_plaintext.= $_block ^ $_key;
2303
- }
2304
- } else {
2305
- for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
2306
- $_block = substr($_text, $_i, '.$block_size.');
2307
- $in = $_xor;
2308
- '.$encrypt_block.'
2309
- $self->_increment_str($_xor);
2310
- $_key = $in;
2311
- $_plaintext.= $_block ^ $_key;
2312
- }
2313
- }
2314
- if ($self->continuousBuffer) {
2315
- $self->decryptIV = $_xor;
2316
- if ($_start = $_ciphertext_len % '.$block_size.') {
2317
- $_buffer["ciphertext"] = substr($_key, $_start) . $_buffer["ciphertext"];
2318
- }
2319
- }
2320
-
2321
- return $_plaintext;
2322
- ';
2323
- break;
2324
- case CRYPT_MODE_CFB:
2325
- $encrypt = $init_encrypt . '
2326
- $_ciphertext = "";
2327
- $_buffer = &$self->enbuffer;
2328
-
2329
- if ($self->continuousBuffer) {
2330
- $_iv = &$self->encryptIV;
2331
- $_pos = &$_buffer["pos"];
2332
- } else {
2333
- $_iv = $self->encryptIV;
2334
- $_pos = 0;
2335
- }
2336
- $_len = strlen($_text);
2337
- $_i = 0;
2338
- if ($_pos) {
2339
- $_orig_pos = $_pos;
2340
- $_max = '.$block_size.' - $_pos;
2341
- if ($_len >= $_max) {
2342
- $_i = $_max;
2343
- $_len-= $_max;
2344
- $_pos = 0;
2345
- } else {
2346
- $_i = $_len;
2347
- $_pos+= $_len;
2348
- $_len = 0;
2349
- }
2350
- $_ciphertext = substr($_iv, $_orig_pos) ^ $_text;
2351
- $_iv = substr_replace($_iv, $_ciphertext, $_orig_pos, $_i);
2352
- }
2353
- while ($_len >= '.$block_size.') {
2354
- $in = $_iv;
2355
- '.$encrypt_block.';
2356
- $_iv = $in ^ substr($_text, $_i, '.$block_size.');
2357
- $_ciphertext.= $_iv;
2358
- $_len-= '.$block_size.';
2359
- $_i+= '.$block_size.';
2360
- }
2361
- if ($_len) {
2362
- $in = $_iv;
2363
- '.$encrypt_block.'
2364
- $_iv = $in;
2365
- $_block = $_iv ^ substr($_text, $_i);
2366
- $_iv = substr_replace($_iv, $_block, 0, $_len);
2367
- $_ciphertext.= $_block;
2368
- $_pos = $_len;
2369
- }
2370
- return $_ciphertext;
2371
- ';
2372
-
2373
- $decrypt = $init_encrypt . '
2374
- $_plaintext = "";
2375
- $_buffer = &$self->debuffer;
2376
-
2377
- if ($self->continuousBuffer) {
2378
- $_iv = &$self->decryptIV;
2379
- $_pos = &$_buffer["pos"];
2380
- } else {
2381
- $_iv = $self->decryptIV;
2382
- $_pos = 0;
2383
- }
2384
- $_len = strlen($_text);
2385
- $_i = 0;
2386
- if ($_pos) {
2387
- $_orig_pos = $_pos;
2388
- $_max = '.$block_size.' - $_pos;
2389
- if ($_len >= $_max) {
2390
- $_i = $_max;
2391
- $_len-= $_max;
2392
- $_pos = 0;
2393
- } else {
2394
- $_i = $_len;
2395
- $_pos+= $_len;
2396
- $_len = 0;
2397
- }
2398
- $_plaintext = substr($_iv, $_orig_pos) ^ $_text;
2399
- $_iv = substr_replace($_iv, substr($_text, 0, $_i), $_orig_pos, $_i);
2400
- }
2401
- while ($_len >= '.$block_size.') {
2402
- $in = $_iv;
2403
- '.$encrypt_block.'
2404
- $_iv = $in;
2405
- $cb = substr($_text, $_i, '.$block_size.');
2406
- $_plaintext.= $_iv ^ $cb;
2407
- $_iv = $cb;
2408
- $_len-= '.$block_size.';
2409
- $_i+= '.$block_size.';
2410
- }
2411
- if ($_len) {
2412
- $in = $_iv;
2413
- '.$encrypt_block.'
2414
- $_iv = $in;
2415
- $_plaintext.= $_iv ^ substr($_text, $_i);
2416
- $_iv = substr_replace($_iv, substr($_text, $_i), 0, $_len);
2417
- $_pos = $_len;
2418
- }
2419
-
2420
- return $_plaintext;
2421
- ';
2422
- break;
2423
- case CRYPT_MODE_OFB:
2424
- $encrypt = $init_encrypt . '
2425
- $_ciphertext = "";
2426
- $_plaintext_len = strlen($_text);
2427
- $_xor = $self->encryptIV;
2428
- $_buffer = &$self->enbuffer;
2429
-
2430
- if (strlen($_buffer["xor"])) {
2431
- for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
2432
- $_block = substr($_text, $_i, '.$block_size.');
2433
- if (strlen($_block) > strlen($_buffer["xor"])) {
2434
- $in = $_xor;
2435
- '.$encrypt_block.'
2436
- $_xor = $in;
2437
- $_buffer["xor"].= $_xor;
2438
- }
2439
- $_key = $self->_string_shift($_buffer["xor"], '.$block_size.');
2440
- $_ciphertext.= $_block ^ $_key;
2441
- }
2442
- } else {
2443
- for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
2444
- $in = $_xor;
2445
- '.$encrypt_block.'
2446
- $_xor = $in;
2447
- $_ciphertext.= substr($_text, $_i, '.$block_size.') ^ $_xor;
2448
- }
2449
- $_key = $_xor;
2450
- }
2451
- if ($self->continuousBuffer) {
2452
- $self->encryptIV = $_xor;
2453
- if ($_start = $_plaintext_len % '.$block_size.') {
2454
- $_buffer["xor"] = substr($_key, $_start) . $_buffer["xor"];
2455
- }
2456
- }
2457
- return $_ciphertext;
2458
- ';
2459
-
2460
- $decrypt = $init_encrypt . '
2461
- $_plaintext = "";
2462
- $_ciphertext_len = strlen($_text);
2463
- $_xor = $self->decryptIV;
2464
- $_buffer = &$self->debuffer;
2465
-
2466
- if (strlen($_buffer["xor"])) {
2467
- for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
2468
- $_block = substr($_text, $_i, '.$block_size.');
2469
- if (strlen($_block) > strlen($_buffer["xor"])) {
2470
- $in = $_xor;
2471
- '.$encrypt_block.'
2472
- $_xor = $in;
2473
- $_buffer["xor"].= $_xor;
2474
- }
2475
- $_key = $self->_string_shift($_buffer["xor"], '.$block_size.');
2476
- $_plaintext.= $_block ^ $_key;
2477
- }
2478
- } else {
2479
- for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
2480
- $in = $_xor;
2481
- '.$encrypt_block.'
2482
- $_xor = $in;
2483
- $_plaintext.= substr($_text, $_i, '.$block_size.') ^ $_xor;
2484
- }
2485
- $_key = $_xor;
2486
- }
2487
- if ($self->continuousBuffer) {
2488
- $self->decryptIV = $_xor;
2489
- if ($_start = $_ciphertext_len % '.$block_size.') {
2490
- $_buffer["xor"] = substr($_key, $_start) . $_buffer["xor"];
2491
- }
2492
- }
2493
- return $_plaintext;
2494
- ';
2495
- break;
2496
- case CRYPT_MODE_STREAM:
2497
- $encrypt = $init_encrypt . '
2498
- $_ciphertext = "";
2499
- '.$encrypt_block.'
2500
- return $_ciphertext;
2501
- ';
2502
- $decrypt = $init_decrypt . '
2503
- $_plaintext = "";
2504
- '.$decrypt_block.'
2505
- return $_plaintext;
2506
- ';
2507
- break;
2508
- // case CRYPT_MODE_CBC:
2509
- default:
2510
- $encrypt = $init_encrypt . '
2511
- $_ciphertext = "";
2512
- $_plaintext_len = strlen($_text);
2513
-
2514
- $in = $self->encryptIV;
2515
-
2516
- for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
2517
- $in = substr($_text, $_i, '.$block_size.') ^ $in;
2518
- '.$encrypt_block.'
2519
- $_ciphertext.= $in;
2520
- }
2521
-
2522
- if ($self->continuousBuffer) {
2523
- $self->encryptIV = $in;
2524
- }
2525
-
2526
- return $_ciphertext;
2527
- ';
2528
-
2529
- $decrypt = $init_decrypt . '
2530
- $_plaintext = "";
2531
- $_text = str_pad($_text, strlen($_text) + ('.$block_size.' - strlen($_text) % '.$block_size.') % '.$block_size.', chr(0));
2532
- $_ciphertext_len = strlen($_text);
2533
-
2534
- $_iv = $self->decryptIV;
2535
-
2536
- for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
2537
- $in = $_block = substr($_text, $_i, '.$block_size.');
2538
- '.$decrypt_block.'
2539
- $_plaintext.= $in ^ $_iv;
2540
- $_iv = $_block;
2541
- }
2542
-
2543
- if ($self->continuousBuffer) {
2544
- $self->decryptIV = $_iv;
2545
- }
2546
-
2547
- return $self->_unpad($_plaintext);
2548
- ';
2549
- break;
2550
- }
2551
-
2552
- // Create the $inline function and return its name as string. Ready to run!
2553
- if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
2554
- eval('$func = function ($_action, &$self, $_text) { ' . $init_crypt . 'if ($_action == "encrypt") { ' . $encrypt . ' } else { ' . $decrypt . ' } };');
2555
- return $func;
2556
- }
2557
-
2558
- return create_function('$_action, &$self, $_text', $init_crypt . 'if ($_action == "encrypt") { ' . $encrypt . ' } else { ' . $decrypt . ' }');
2559
- }
2560
-
2561
- /**
2562
- * Holds the lambda_functions table (classwide)
2563
- *
2564
- * Each name of the lambda function, created from
2565
- * _setupInlineCrypt() && _createInlineCryptFunction()
2566
- * is stored, classwide (!), here for reusing.
2567
- *
2568
- * The string-based index of $function is a classwide
2569
- * unique value representing, at least, the $mode of
2570
- * operation (or more... depends of the optimizing level)
2571
- * for which $mode the lambda function was created.
2572
- *
2573
- * @access private
2574
- * @return array &$functions
2575
- */
2576
- function &_getLambdaFunctions()
2577
- {
2578
- static $functions = array();
2579
- return $functions;
2580
- }
2581
-
2582
- /**
2583
- * Generates a digest from $bytes
2584
- *
2585
- * @see self::_setupInlineCrypt()
2586
- * @access private
2587
- * @param $bytes
2588
- * @return string
2589
- */
2590
- function _hashInlineCryptFunction($bytes)
2591
- {
2592
- if (!defined('CRYPT_BASE_WHIRLPOOL_AVAILABLE')) {
2593
- define('CRYPT_BASE_WHIRLPOOL_AVAILABLE', (bool)(extension_loaded('hash') && in_array('whirlpool', hash_algos())));
2594
- }
2595
-
2596
- $result = '';
2597
- $hash = $bytes;
2598
-
2599
- switch (true) {
2600
- case CRYPT_BASE_WHIRLPOOL_AVAILABLE:
2601
- foreach (str_split($bytes, 64) as $t) {
2602
- $hash = hash('whirlpool', $hash, true);
2603
- $result .= $t ^ $hash;
2604
- }
2605
- return $result . hash('whirlpool', $hash, true);
2606
- default:
2607
- $len = strlen($bytes);
2608
- for ($i = 0; $i < $len; $i+=20) {
2609
- $t = substr($bytes, $i, 20);
2610
- $hash = pack('H*', sha1($hash));
2611
- $result .= $t ^ $hash;
2612
- }
2613
- return $result . pack('H*', sha1($hash));
2614
- }
2615
- }
2616
-
2617
- /**
2618
- * Convert float to int
2619
- *
2620
- * On 32-bit Linux installs running PHP < 5.3 converting floats to ints doesn't always work
2621
- *
2622
- * @access private
2623
- * @param string $x
2624
- * @return int
2625
- */
2626
- function safe_intval($x)
2627
- {
2628
- switch (true) {
2629
- case is_int($x):
2630
- // PHP 5.3, per http://php.net/releases/5_3_0.php, introduced "more consistent float rounding"
2631
- case version_compare(PHP_VERSION, '5.3.0') >= 0 && (php_uname('m') & "\xDF\xDF\xDF") != 'ARM':
2632
- // PHP_OS & "\xDF\xDF\xDF" == strtoupper(substr(PHP_OS, 0, 3)), but a lot faster
2633
- case (PHP_OS & "\xDF\xDF\xDF") === 'WIN':
2634
- return $x;
2635
- }
2636
- return (fmod($x, 0x80000000) & 0x7FFFFFFF) |
2637
- ((fmod(floor($x / 0x80000000), 2) & 1) << 31);
2638
- }
2639
-
2640
- /**
2641
- * eval()'able string for in-line float to int
2642
- *
2643
- * @access private
2644
- * @return string
2645
- */
2646
- function safe_intval_inline()
2647
- {
2648
- // on 32-bit linux systems with PHP < 5.3 float to integer conversion is bad
2649
- switch (true) {
2650
- case defined('PHP_INT_SIZE') && PHP_INT_SIZE == 8:
2651
- case version_compare(PHP_VERSION, '5.3.0') >= 0 && (php_uname('m') & "\xDF\xDF\xDF") != 'ARM':
2652
- case (PHP_OS & "\xDF\xDF\xDF") === 'WIN':
2653
- return '%s';
2654
- break;
2655
- default:
2656
- $safeint = '(is_int($temp = %s) ? $temp : (fmod($temp, 0x80000000) & 0x7FFFFFFF) | ';
2657
- return $safeint . '((fmod(floor($temp / 0x80000000), 2) & 1) << 31))';
2658
- }
2659
- }
2660
- }
1
+ <?php
2
+ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
+ /**
4
+ * Base Class for all Crypt_* cipher classes
5
+ *
6
+ * PHP versions 4 and 5
7
+ *
8
+ * Internally for phpseclib developers:
9
+ * If you plan to add a new cipher class, please note following rules:
10
+ *
11
+ * - The new Crypt_* cipher class should extend Crypt_Base
12
+ *
13
+ * - Following methods are then required to be overridden/overloaded:
14
+ *
15
+ * - _encryptBlock()
16
+ *
17
+ * - _decryptBlock()
18
+ *
19
+ * - _setupKey()
20
+ *
21
+ * - All other methods are optional to be overridden/overloaded
22
+ *
23
+ * - Look at the source code of the current ciphers how they extend Crypt_Base
24
+ * and take one of them as a start up for the new cipher class.
25
+ *
26
+ * - Please read all the other comments/notes/hints here also for each class var/method
27
+ *
28
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
29
+ * of this software and associated documentation files (the "Software"), to deal
30
+ * in the Software without restriction, including without limitation the rights
31
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
32
+ * copies of the Software, and to permit persons to whom the Software is
33
+ * furnished to do so, subject to the following conditions:
34
+ *
35
+ * The above copyright notice and this permission notice shall be included in
36
+ * all copies or substantial portions of the Software.
37
+ *
38
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
39
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
40
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
41
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
42
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
43
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
44
+ * THE SOFTWARE.
45
+ *
46
+ * @category Crypt
47
+ * @package Crypt_Base
48
+ * @author Jim Wigginton <terrafrost@php.net>
49
+ * @author Hans-Juergen Petrich <petrich@tronic-media.com>
50
+ * @copyright 2007 Jim Wigginton
51
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
52
+ * @link http://phpseclib.sourceforge.net
53
+ */
54
+
55
+ /**#@+
56
+ * @access public
57
+ * @see self::encrypt()
58
+ * @see self::decrypt()
59
+ */
60
+ /**
61
+ * Encrypt / decrypt using the Counter mode.
62
+ *
63
+ * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
64
+ *
65
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
66
+ */
67
+ define('CRYPT_MODE_CTR', -1);
68
+ /**
69
+ * Encrypt / decrypt using the Electronic Code Book mode.
70
+ *
71
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
72
+ */
73
+ define('CRYPT_MODE_ECB', 1);
74
+ /**
75
+ * Encrypt / decrypt using the Code Book Chaining mode.
76
+ *
77
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
78
+ */
79
+ define('CRYPT_MODE_CBC', 2);
80
+ /**
81
+ * Encrypt / decrypt using the Cipher Feedback mode.
82
+ *
83
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29
84
+ */
85
+ define('CRYPT_MODE_CFB', 3);
86
+ /**
87
+ * Encrypt / decrypt using the Output Feedback mode.
88
+ *
89
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29
90
+ */
91
+ define('CRYPT_MODE_OFB', 4);
92
+ /**
93
+ * Encrypt / decrypt using streaming mode.
94
+ */
95
+ define('CRYPT_MODE_STREAM', 5);
96
+ /**#@-*/
97
+
98
+ /**#@+
99
+ * @access private
100
+ * @see self::Crypt_Base()
101
+ * @internal These constants are for internal use only
102
+ */
103
+ /**
104
+ * Base value for the internal implementation $engine switch
105
+ */
106
+ define('CRYPT_ENGINE_INTERNAL', 1);
107
+ /**
108
+ * Base value for the mcrypt implementation $engine switch
109
+ */
110
+ define('CRYPT_ENGINE_MCRYPT', 2);
111
+ /**
112
+ * Base value for the OpenSSL implementation $engine switch
113
+ */
114
+ define('CRYPT_ENGINE_OPENSSL', 3);
115
+ /**#@-*/
116
+
117
+ /**
118
+ * Base Class for all Crypt_* cipher classes
119
+ *
120
+ * @package Crypt_Base
121
+ * @author Jim Wigginton <terrafrost@php.net>
122
+ * @author Hans-Juergen Petrich <petrich@tronic-media.com>
123
+ * @access public
124
+ */
125
+ class Crypt_Base
126
+ {
127
+ /**
128
+ * The Encryption Mode
129
+ *
130
+ * @see self::Crypt_Base()
131
+ * @var int
132
+ * @access private
133
+ */
134
+ var $mode;
135
+
136
+ /**
137
+ * The Block Length of the block cipher
138
+ *
139
+ * @var int
140
+ * @access private
141
+ */
142
+ var $block_size = 16;
143
+
144
+ /**
145
+ * The Key
146
+ *
147
+ * @see self::setKey()
148
+ * @var string
149
+ * @access private
150
+ */
151
+ var $key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
152
+
153
+ /**
154
+ * The Initialization Vector
155
+ *
156
+ * @see self::setIV()
157
+ * @var string
158
+ * @access private
159
+ */
160
+ var $iv;
161
+
162
+ /**
163
+ * A "sliding" Initialization Vector
164
+ *
165
+ * @see self::enableContinuousBuffer()
166
+ * @see self::_clearBuffers()
167
+ * @var string
168
+ * @access private
169
+ */
170
+ var $encryptIV;
171
+
172
+ /**
173
+ * A "sliding" Initialization Vector
174
+ *
175
+ * @see self::enableContinuousBuffer()
176
+ * @see self::_clearBuffers()
177
+ * @var string
178
+ * @access private
179
+ */
180
+ var $decryptIV;
181
+
182
+ /**
183
+ * Continuous Buffer status
184
+ *
185
+ * @see self::enableContinuousBuffer()
186
+ * @var bool
187
+ * @access private
188
+ */
189
+ var $continuousBuffer = false;
190
+
191
+ /**
192
+ * Encryption buffer for CTR, OFB and CFB modes
193
+ *
194
+ * @see self::encrypt()
195
+ * @see self::_clearBuffers()
196
+ * @var array
197
+ * @access private
198
+ */
199
+ var $enbuffer;
200
+
201
+ /**
202
+ * Decryption buffer for CTR, OFB and CFB modes
203
+ *
204
+ * @see self::decrypt()
205
+ * @see self::_clearBuffers()
206
+ * @var array
207
+ * @access private
208
+ */
209
+ var $debuffer;
210
+
211
+ /**
212
+ * mcrypt resource for encryption
213
+ *
214
+ * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
215
+ * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
216
+ *
217
+ * @see self::encrypt()
218
+ * @var resource
219
+ * @access private
220
+ */
221
+ var $enmcrypt;
222
+
223
+ /**
224
+ * mcrypt resource for decryption
225
+ *
226
+ * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
227
+ * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
228
+ *
229
+ * @see self::decrypt()
230
+ * @var resource
231
+ * @access private
232
+ */
233
+ var $demcrypt;
234
+
235
+ /**
236
+ * Does the enmcrypt resource need to be (re)initialized?
237
+ *
238
+ * @see Crypt_Twofish::setKey()
239
+ * @see Crypt_Twofish::setIV()
240
+ * @var bool
241
+ * @access private
242
+ */
243
+ var $enchanged = true;
244
+
245
+ /**
246
+ * Does the demcrypt resource need to be (re)initialized?
247
+ *
248
+ * @see Crypt_Twofish::setKey()
249
+ * @see Crypt_Twofish::setIV()
250
+ * @var bool
251
+ * @access private
252
+ */
253
+ var $dechanged = true;
254
+
255
+ /**
256
+ * mcrypt resource for CFB mode
257
+ *
258
+ * mcrypt's CFB mode, in (and only in) buffered context,
259
+ * is broken, so phpseclib implements the CFB mode by it self,
260
+ * even when the mcrypt php extension is available.
261
+ *
262
+ * In order to do the CFB-mode work (fast) phpseclib
263
+ * use a separate ECB-mode mcrypt resource.
264
+ *
265
+ * @link http://phpseclib.sourceforge.net/cfb-demo.phps
266
+ * @see self::encrypt()
267
+ * @see self::decrypt()
268
+ * @see self::_setupMcrypt()
269
+ * @var resource
270
+ * @access private
271
+ */
272
+ var $ecb;
273
+
274
+ /**
275
+ * Optimizing value while CFB-encrypting
276
+ *
277
+ * Only relevant if $continuousBuffer enabled
278
+ * and $engine == CRYPT_ENGINE_MCRYPT
279
+ *
280
+ * It's faster to re-init $enmcrypt if
281
+ * $buffer bytes > $cfb_init_len than
282
+ * using the $ecb resource furthermore.
283
+ *
284
+ * This value depends of the chosen cipher
285
+ * and the time it would be needed for it's
286
+ * initialization [by mcrypt_generic_init()]
287
+ * which, typically, depends on the complexity
288
+ * on its internaly Key-expanding algorithm.
289
+ *
290
+ * @see self::encrypt()
291
+ * @var int
292
+ * @access private
293
+ */
294
+ var $cfb_init_len = 600;
295
+
296
+ /**
297
+ * Does internal cipher state need to be (re)initialized?
298
+ *
299
+ * @see self::setKey()
300
+ * @see self::setIV()
301
+ * @see self::disableContinuousBuffer()
302
+ * @var bool
303
+ * @access private
304
+ */
305
+ var $changed = true;
306
+
307
+ /**
308
+ * Padding status
309
+ *
310
+ * @see self::enablePadding()
311
+ * @var bool
312
+ * @access private
313
+ */
314
+ var $padding = true;
315
+
316
+ /**
317
+ * Is the mode one that is paddable?
318
+ *
319
+ * @see self::Crypt_Base()
320
+ * @var bool
321
+ * @access private
322
+ */
323
+ var $paddable = false;
324
+
325
+ /**
326
+ * Holds which crypt engine internaly should be use,
327
+ * which will be determined automatically on __construct()
328
+ *
329
+ * Currently available $engines are:
330
+ * - CRYPT_ENGINE_OPENSSL (very fast, php-extension: openssl, extension_loaded('openssl') required)
331
+ * - CRYPT_ENGINE_MCRYPT (fast, php-extension: mcrypt, extension_loaded('mcrypt') required)
332
+ * - CRYPT_ENGINE_INTERNAL (slower, pure php-engine, no php-extension required)
333
+ *
334
+ * @see self::_setEngine()
335
+ * @see self::encrypt()
336
+ * @see self::decrypt()
337
+ * @var int
338
+ * @access private
339
+ */
340
+ var $engine;
341
+
342
+ /**
343
+ * Holds the preferred crypt engine
344
+ *
345
+ * @see self::_setEngine()
346
+ * @see self::setPreferredEngine()
347
+ * @var int
348
+ * @access private
349
+ */
350
+ var $preferredEngine;
351
+
352
+ /**
353
+ * The mcrypt specific name of the cipher
354
+ *
355
+ * Only used if $engine == CRYPT_ENGINE_MCRYPT
356
+ *
357
+ * @link http://www.php.net/mcrypt_module_open
358
+ * @link http://www.php.net/mcrypt_list_algorithms
359
+ * @see self::_setupMcrypt()
360
+ * @var string
361
+ * @access private
362
+ */
363
+ var $cipher_name_mcrypt;
364
+
365
+ /**
366
+ * The openssl specific name of the cipher
367
+ *
368
+ * Only used if $engine == CRYPT_ENGINE_OPENSSL
369
+ *
370
+ * @link http://www.php.net/openssl-get-cipher-methods
371
+ * @var string
372
+ * @access private
373
+ */
374
+ var $cipher_name_openssl;
375
+
376
+ /**
377
+ * The openssl specific name of the cipher in ECB mode
378
+ *
379
+ * If OpenSSL does not support the mode we're trying to use (CTR)
380
+ * it can still be emulated with ECB mode.
381
+ *
382
+ * @link http://www.php.net/openssl-get-cipher-methods
383
+ * @var string
384
+ * @access private
385
+ */
386
+ var $cipher_name_openssl_ecb;
387
+
388
+ /**
389
+ * The default salt used by setPassword()
390
+ *
391
+ * @see self::setPassword()
392
+ * @var string
393
+ * @access private
394
+ */
395
+ var $password_default_salt = 'phpseclib/salt';
396
+
397
+ /**
398
+ * The namespace used by the cipher for its constants.
399
+ *
400
+ * ie: AES.php is using CRYPT_AES_MODE_* for its constants
401
+ * so $const_namespace is AES
402
+ *
403
+ * DES.php is using CRYPT_DES_MODE_* for its constants
404
+ * so $const_namespace is DES... and so on
405
+ *
406
+ * All CRYPT_<$const_namespace>_MODE_* are aliases of
407
+ * the generic CRYPT_MODE_* constants, so both could be used
408
+ * for each cipher.
409
+ *
410
+ * Example:
411
+ * $aes = new Crypt_AES(CRYPT_AES_MODE_CFB); // $aes will operate in cfb mode
412
+ * $aes = new Crypt_AES(CRYPT_MODE_CFB); // identical
413
+ *
414
+ * @see self::Crypt_Base()
415
+ * @var string
416
+ * @access private
417
+ */
418
+ var $const_namespace;
419
+
420
+ /**
421
+ * The name of the performance-optimized callback function
422
+ *
423
+ * Used by encrypt() / decrypt()
424
+ * only if $engine == CRYPT_ENGINE_INTERNAL
425
+ *
426
+ * @see self::encrypt()
427
+ * @see self::decrypt()
428
+ * @see self::_setupInlineCrypt()
429
+ * @see self::$use_inline_crypt
430
+ * @var Callback
431
+ * @access private
432
+ */
433
+ var $inline_crypt;
434
+
435
+ /**
436
+ * Holds whether performance-optimized $inline_crypt() can/should be used.
437
+ *
438
+ * @see self::encrypt()
439
+ * @see self::decrypt()
440
+ * @see self::inline_crypt
441
+ * @var mixed
442
+ * @access private
443
+ */
444
+ var $use_inline_crypt;
445
+
446
+ /**
447
+ * If OpenSSL can be used in ECB but not in CTR we can emulate CTR
448
+ *
449
+ * @see self::_openssl_ctr_process()
450
+ * @var bool
451
+ * @access private
452
+ */
453
+ var $openssl_emulate_ctr = false;
454
+
455
+ /**
456
+ * Determines what options are passed to openssl_encrypt/decrypt
457
+ *
458
+ * @see self::isValidEngine()
459
+ * @var mixed
460
+ * @access private
461
+ */
462
+ var $openssl_options;
463
+
464
+ /**
465
+ * Has the key length explicitly been set or should it be derived from the key, itself?
466
+ *
467
+ * @see self::setKeyLength()
468
+ * @var bool
469
+ * @access private
470
+ */
471
+ var $explicit_key_length = false;
472
+
473
+ /**
474
+ * Don't truncate / null pad key
475
+ *
476
+ * @see self::_clearBuffers()
477
+ * @var bool
478
+ * @access private
479
+ */
480
+ var $skip_key_adjustment = false;
481
+
482
+ /**
483
+ * Default Constructor.
484
+ *
485
+ * Determines whether or not the mcrypt extension should be used.
486
+ *
487
+ * $mode could be:
488
+ *
489
+ * - CRYPT_MODE_ECB
490
+ *
491
+ * - CRYPT_MODE_CBC
492
+ *
493
+ * - CRYPT_MODE_CTR
494
+ *
495
+ * - CRYPT_MODE_CFB
496
+ *
497
+ * - CRYPT_MODE_OFB
498
+ *
499
+ * (or the alias constants of the chosen cipher, for example for AES: CRYPT_AES_MODE_ECB or CRYPT_AES_MODE_CBC ...)
500
+ *
501
+ * If not explicitly set, CRYPT_MODE_CBC will be used.
502
+ *
503
+ * @param int $mode
504
+ * @access public
505
+ */
506
+ function __construct($mode = CRYPT_MODE_CBC)
507
+ {
508
+ // $mode dependent settings
509
+ switch ($mode) {
510
+ case CRYPT_MODE_ECB:
511
+ $this->paddable = true;
512
+ $this->mode = CRYPT_MODE_ECB;
513
+ break;
514
+ case CRYPT_MODE_CTR:
515
+ case CRYPT_MODE_CFB:
516
+ case CRYPT_MODE_OFB:
517
+ case CRYPT_MODE_STREAM:
518
+ $this->mode = $mode;
519
+ break;
520
+ case CRYPT_MODE_CBC:
521
+ default:
522
+ $this->paddable = true;
523
+ $this->mode = CRYPT_MODE_CBC;
524
+ }
525
+
526
+ $this->_setEngine();
527
+
528
+ // Determining whether inline crypting can be used by the cipher
529
+ if ($this->use_inline_crypt !== false) {
530
+ $this->use_inline_crypt = version_compare(PHP_VERSION, '5.3.0') >= 0 || function_exists('create_function');
531
+ }
532
+ }
533
+
534
+ /**
535
+ * PHP4 compatible Default Constructor.
536
+ *
537
+ * @see self::__construct()
538
+ * @param int $mode
539
+ * @access public
540
+ */
541
+ function Crypt_Base($mode = CRYPT_MODE_CBC)
542
+ {
543
+ $this->__construct($mode);
544
+ }
545
+
546
+ /**
547
+ * Sets the initialization vector. (optional)
548
+ *
549
+ * SetIV is not required when CRYPT_MODE_ECB (or ie for AES: CRYPT_AES_MODE_ECB) is being used. If not explicitly set, it'll be assumed
550
+ * to be all zero's.
551
+ *
552
+ * @access public
553
+ * @param string $iv
554
+ * @internal Can be overwritten by a sub class, but does not have to be
555
+ */
556
+ function setIV($iv)
557
+ {
558
+ if ($this->mode == CRYPT_MODE_ECB) {
559
+ return;
560
+ }
561
+
562
+ $this->iv = $iv;
563
+ $this->changed = true;
564
+ }
565
+
566
+ /**
567
+ * Sets the key length.
568
+ *
569
+ * Keys with explicitly set lengths need to be treated accordingly
570
+ *
571
+ * @access public
572
+ * @param int $length
573
+ */
574
+ function setKeyLength($length)
575
+ {
576
+ $this->explicit_key_length = true;
577
+ $this->changed = true;
578
+ $this->_setEngine();
579
+ }
580
+
581
+ /**
582
+ * Returns the current key length in bits
583
+ *
584
+ * @access public
585
+ * @return int
586
+ */
587
+ function getKeyLength()
588
+ {
589
+ return $this->key_length << 3;
590
+ }
591
+
592
+ /**
593
+ * Returns the current block length in bits
594
+ *
595
+ * @access public
596
+ * @return int
597
+ */
598
+ function getBlockLength()
599
+ {
600
+ return $this->block_size << 3;
601
+ }
602
+
603
+ /**
604
+ * Sets the key.
605
+ *
606
+ * The min/max length(s) of the key depends on the cipher which is used.
607
+ * If the key not fits the length(s) of the cipher it will paded with null bytes
608
+ * up to the closest valid key length. If the key is more than max length,
609
+ * we trim the excess bits.
610
+ *
611
+ * If the key is not explicitly set, it'll be assumed to be all null bytes.
612
+ *
613
+ * @access public
614
+ * @param string $key
615
+ * @internal Could, but not must, extend by the child Crypt_* class
616
+ */
617
+ function setKey($key)
618
+ {
619
+ if (!$this->explicit_key_length) {
620
+ $this->setKeyLength(strlen($key) << 3);
621
+ $this->explicit_key_length = false;
622
+ }
623
+
624
+ $this->key = $key;
625
+ $this->changed = true;
626
+ $this->_setEngine();
627
+ }
628
+
629
+ /**
630
+ * Sets the password.
631
+ *
632
+ * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows:
633
+ * {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2} or pbkdf1:
634
+ * $hash, $salt, $count, $dkLen
635
+ *
636
+ * Where $hash (default = sha1) currently supports the following hashes: see: Crypt/Hash.php
637
+ *
638
+ * @see Crypt/Hash.php
639
+ * @param string $password
640
+ * @param string $method
641
+ * @return bool
642
+ * @access public
643
+ * @internal Could, but not must, extend by the child Crypt_* class
644
+ */
645
+ function setPassword($password, $method = 'pbkdf2')
646
+ {
647
+ $key = '';
648
+
649
+ switch ($method) {
650
+ default: // 'pbkdf2' or 'pbkdf1'
651
+ $func_args = func_get_args();
652
+
653
+ // Hash function
654
+ $hash = isset($func_args[2]) ? $func_args[2] : 'sha1';
655
+
656
+ // WPA and WPA2 use the SSID as the salt
657
+ $salt = isset($func_args[3]) ? $func_args[3] : $this->password_default_salt;
658
+
659
+ // RFC2898#section-4.2 uses 1,000 iterations by default
660
+ // WPA and WPA2 use 4,096.
661
+ $count = isset($func_args[4]) ? $func_args[4] : 1000;
662
+
663
+ // Keylength
664
+ if (isset($func_args[5]) && $func_args[5] > 0) {
665
+ $dkLen = $func_args[5];
666
+ } else {
667
+ $dkLen = $method == 'pbkdf1' ? 2 * $this->key_length : $this->key_length;
668
+ }
669
+
670
+ switch (true) {
671
+ case $method == 'pbkdf1':
672
+ if (!class_exists('Crypt_Hash')) {
673
+ include_once 'Crypt/Hash.php';
674
+ }
675
+ $hashObj = new Crypt_Hash();
676
+ $hashObj->setHash($hash);
677
+ if ($dkLen > $hashObj->getLength()) {
678
+ user_error('Derived key too long');
679
+ return false;
680
+ }
681
+ $t = $password . $salt;
682
+ for ($i = 0; $i < $count; ++$i) {
683
+ $t = $hashObj->hash($t);
684
+ }
685
+ $key = substr($t, 0, $dkLen);
686
+
687
+ $this->setKey(substr($key, 0, $dkLen >> 1));
688
+ $this->setIV(substr($key, $dkLen >> 1));
689
+
690
+ return true;
691
+ // Determining if php[>=5.5.0]'s hash_pbkdf2() function avail- and useable
692
+ case !function_exists('hash_pbkdf2'):
693
+ case !function_exists('hash_algos'):
694
+ case !in_array($hash, hash_algos()):
695
+ if (!class_exists('Crypt_Hash')) {
696
+ include_once 'Crypt/Hash.php';
697
+ }
698
+ $i = 1;
699
+ $hmac = new Crypt_Hash();
700
+ $hmac->setHash($hash);
701
+ $hmac->setKey($password);
702
+ while (strlen($key) < $dkLen) {
703
+ $f = $u = $hmac->hash($salt . pack('N', $i++));
704
+ for ($j = 2; $j <= $count; ++$j) {
705
+ $u = $hmac->hash($u);
706
+ $f^= $u;
707
+ }
708
+ $key.= $f;
709
+ }
710
+ $key = substr($key, 0, $dkLen);
711
+ break;
712
+ default:
713
+ $key = hash_pbkdf2($hash, $password, $salt, $count, $dkLen, true);
714
+ }
715
+ }
716
+
717
+ $this->setKey($key);
718
+
719
+ return true;
720
+ }
721
+
722
+ /**
723
+ * Encrypts a message.
724
+ *
725
+ * $plaintext will be padded with additional bytes such that it's length is a multiple of the block size. Other cipher
726
+ * implementations may or may not pad in the same manner. Other common approaches to padding and the reasons why it's
727
+ * necessary are discussed in the following
728
+ * URL:
729
+ *
730
+ * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
731
+ *
732
+ * An alternative to padding is to, separately, send the length of the file. This is what SSH, in fact, does.
733
+ * strlen($plaintext) will still need to be a multiple of the block size, however, arbitrary values can be added to make it that
734
+ * length.
735
+ *
736
+ * @see self::decrypt()
737
+ * @access public
738
+ * @param string $plaintext
739
+ * @return string $ciphertext
740
+ * @internal Could, but not must, extend by the child Crypt_* class
741
+ */
742
+ function encrypt($plaintext)
743
+ {
744
+ if ($this->paddable) {
745
+ $plaintext = $this->_pad($plaintext);
746
+ }
747
+
748
+ if ($this->engine === CRYPT_ENGINE_OPENSSL) {
749
+ if ($this->changed) {
750
+ $this->_clearBuffers();
751
+ $this->changed = false;
752
+ }
753
+ switch ($this->mode) {
754
+ case CRYPT_MODE_STREAM:
755
+ return openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
756
+ case CRYPT_MODE_ECB:
757
+ $result = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
758
+ return !defined('OPENSSL_RAW_DATA') ? substr($result, 0, -$this->block_size) : $result;
759
+ case CRYPT_MODE_CBC:
760
+ $result = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->encryptIV);
761
+ if (!defined('OPENSSL_RAW_DATA')) {
762
+ $result = substr($result, 0, -$this->block_size);
763
+ }
764
+ if ($this->continuousBuffer) {
765
+ $this->encryptIV = substr($result, -$this->block_size);
766
+ }
767
+ return $result;
768
+ case CRYPT_MODE_CTR:
769
+ return $this->_openssl_ctr_process($plaintext, $this->encryptIV, $this->enbuffer);
770
+ case CRYPT_MODE_CFB:
771
+ // cfb loosely routines inspired by openssl's:
772
+ // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
773
+ $ciphertext = '';
774
+ if ($this->continuousBuffer) {
775
+ $iv = &$this->encryptIV;
776
+ $pos = &$this->enbuffer['pos'];
777
+ } else {
778
+ $iv = $this->encryptIV;
779
+ $pos = 0;
780
+ }
781
+ $len = strlen($plaintext);
782
+ $i = 0;
783
+ if ($pos) {
784
+ $orig_pos = $pos;
785
+ $max = $this->block_size - $pos;
786
+ if ($len >= $max) {
787
+ $i = $max;
788
+ $len-= $max;
789
+ $pos = 0;
790
+ } else {
791
+ $i = $len;
792
+ $pos+= $len;
793
+ $len = 0;
794
+ }
795
+ // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
796
+ $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
797
+ $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
798
+ $plaintext = substr($plaintext, $i);
799
+ }
800
+
801
+ $overflow = $len % $this->block_size;
802
+
803
+ if ($overflow) {
804
+ $ciphertext.= openssl_encrypt(substr($plaintext, 0, -$overflow) . str_repeat("\0", $this->block_size), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
805
+ $iv = $this->_string_pop($ciphertext, $this->block_size);
806
+
807
+ $size = $len - $overflow;
808
+ $block = $iv ^ substr($plaintext, -$overflow);
809
+ $iv = substr_replace($iv, $block, 0, $overflow);
810
+ $ciphertext.= $block;
811
+ $pos = $overflow;
812
+ } elseif ($len) {
813
+ $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
814
+ $iv = substr($ciphertext, -$this->block_size);
815
+ }
816
+
817
+ return $ciphertext;
818
+ case CRYPT_MODE_OFB:
819
+ return $this->_openssl_ofb_process($plaintext, $this->encryptIV, $this->enbuffer);
820
+ }
821
+ }
822
+
823
+ if ($this->engine === CRYPT_ENGINE_MCRYPT) {
824
+ if ($this->changed) {
825
+ $this->_setupMcrypt();
826
+ $this->changed = false;
827
+ }
828
+ if ($this->enchanged) {
829
+ @mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
830
+ $this->enchanged = false;
831
+ }
832
+
833
+ // re: {@link http://phpseclib.sourceforge.net/cfb-demo.phps}
834
+ // using mcrypt's default handing of CFB the above would output two different things. using phpseclib's
835
+ // rewritten CFB implementation the above outputs the same thing twice.
836
+ if ($this->mode == CRYPT_MODE_CFB && $this->continuousBuffer) {
837
+ $block_size = $this->block_size;
838
+ $iv = &$this->encryptIV;
839
+ $pos = &$this->enbuffer['pos'];
840
+ $len = strlen($plaintext);
841
+ $ciphertext = '';
842
+ $i = 0;
843
+ if ($pos) {
844
+ $orig_pos = $pos;
845
+ $max = $block_size - $pos;
846
+ if ($len >= $max) {
847
+ $i = $max;
848
+ $len-= $max;
849
+ $pos = 0;
850
+ } else {
851
+ $i = $len;
852
+ $pos+= $len;
853
+ $len = 0;
854
+ }
855
+ $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
856
+ $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
857
+ $this->enbuffer['enmcrypt_init'] = true;
858
+ }
859
+ if ($len >= $block_size) {
860
+ if ($this->enbuffer['enmcrypt_init'] === false || $len > $this->cfb_init_len) {
861
+ if ($this->enbuffer['enmcrypt_init'] === true) {
862
+ @mcrypt_generic_init($this->enmcrypt, $this->key, $iv);
863
+ $this->enbuffer['enmcrypt_init'] = false;
864
+ }
865
+ $ciphertext.= @mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % $block_size));
866
+ $iv = substr($ciphertext, -$block_size);
867
+ $len%= $block_size;
868
+ } else {
869
+ while ($len >= $block_size) {
870
+ $iv = @mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, $block_size);
871
+ $ciphertext.= $iv;
872
+ $len-= $block_size;
873
+ $i+= $block_size;
874
+ }
875
+ }
876
+ }
877
+
878
+ if ($len) {
879
+ $iv = @mcrypt_generic($this->ecb, $iv);
880
+ $block = $iv ^ substr($plaintext, -$len);
881
+ $iv = substr_replace($iv, $block, 0, $len);
882
+ $ciphertext.= $block;
883
+ $pos = $len;
884
+ }
885
+
886
+ return $ciphertext;
887
+ }
888
+
889
+ $ciphertext = @mcrypt_generic($this->enmcrypt, $plaintext);
890
+
891
+ if (!$this->continuousBuffer) {
892
+ @mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
893
+ }
894
+
895
+ return $ciphertext;
896
+ }
897
+
898
+ if ($this->changed) {
899
+ $this->_setup();
900
+ $this->changed = false;
901
+ }
902
+ if ($this->use_inline_crypt) {
903
+ $inline = $this->inline_crypt;
904
+ return $inline('encrypt', $this, $plaintext);
905
+ }
906
+
907
+ $buffer = &$this->enbuffer;
908
+ $block_size = $this->block_size;
909
+ $ciphertext = '';
910
+ switch ($this->mode) {
911
+ case CRYPT_MODE_ECB:
912
+ for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
913
+ $ciphertext.= $this->_encryptBlock(substr($plaintext, $i, $block_size));
914
+ }
915
+ break;
916
+ case CRYPT_MODE_CBC:
917
+ $xor = $this->encryptIV;
918
+ for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
919
+ $block = substr($plaintext, $i, $block_size);
920
+ $block = $this->_encryptBlock($block ^ $xor);
921
+ $xor = $block;
922
+ $ciphertext.= $block;
923
+ }
924
+ if ($this->continuousBuffer) {
925
+ $this->encryptIV = $xor;
926
+ }
927
+ break;
928
+ case CRYPT_MODE_CTR:
929
+ $xor = $this->encryptIV;
930
+ if (strlen($buffer['ciphertext'])) {
931
+ for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
932
+ $block = substr($plaintext, $i, $block_size);
933
+ if (strlen($block) > strlen($buffer['ciphertext'])) {
934
+ $buffer['ciphertext'].= $this->_encryptBlock($xor);
935
+ }
936
+ $this->_increment_str($xor);
937
+ $key = $this->_string_shift($buffer['ciphertext'], $block_size);
938
+ $ciphertext.= $block ^ $key;
939
+ }
940
+ } else {
941
+ for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
942
+ $block = substr($plaintext, $i, $block_size);
943
+ $key = $this->_encryptBlock($xor);
944
+ $this->_increment_str($xor);
945
+ $ciphertext.= $block ^ $key;
946
+ }
947
+ }
948
+ if ($this->continuousBuffer) {
949
+ $this->encryptIV = $xor;
950
+ if ($start = strlen($plaintext) % $block_size) {
951
+ $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
952
+ }
953
+ }
954
+ break;
955
+ case CRYPT_MODE_CFB:
956
+ // cfb loosely routines inspired by openssl's:
957
+ // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
958
+ if ($this->continuousBuffer) {
959
+ $iv = &$this->encryptIV;
960
+ $pos = &$buffer['pos'];
961
+ } else {
962
+ $iv = $this->encryptIV;
963
+ $pos = 0;
964
+ }
965
+ $len = strlen($plaintext);
966
+ $i = 0;
967
+ if ($pos) {
968
+ $orig_pos = $pos;
969
+ $max = $block_size - $pos;
970
+ if ($len >= $max) {
971
+ $i = $max;
972
+ $len-= $max;
973
+ $pos = 0;
974
+ } else {
975
+ $i = $len;
976
+ $pos+= $len;
977
+ $len = 0;
978
+ }
979
+ // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
980
+ $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
981
+ $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
982
+ }
983
+ while ($len >= $block_size) {
984
+ $iv = $this->_encryptBlock($iv) ^ substr($plaintext, $i, $block_size);
985
+ $ciphertext.= $iv;
986
+ $len-= $block_size;
987
+ $i+= $block_size;
988
+ }
989
+ if ($len) {
990
+ $iv = $this->_encryptBlock($iv);
991
+ $block = $iv ^ substr($plaintext, $i);
992
+ $iv = substr_replace($iv, $block, 0, $len);
993
+ $ciphertext.= $block;
994
+ $pos = $len;
995
+ }
996
+ break;
997
+ case CRYPT_MODE_OFB:
998
+ $xor = $this->encryptIV;
999
+ if (strlen($buffer['xor'])) {
1000
+ for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
1001
+ $block = substr($plaintext, $i, $block_size);
1002
+ if (strlen($block) > strlen($buffer['xor'])) {
1003
+ $xor = $this->_encryptBlock($xor);
1004
+ $buffer['xor'].= $xor;
1005
+ }
1006
+ $key = $this->_string_shift($buffer['xor'], $block_size);
1007
+ $ciphertext.= $block ^ $key;
1008
+ }
1009
+ } else {
1010
+ for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
1011
+ $xor = $this->_encryptBlock($xor);
1012
+ $ciphertext.= substr($plaintext, $i, $block_size) ^ $xor;
1013
+ }
1014
+ $key = $xor;
1015
+ }
1016
+ if ($this->continuousBuffer) {
1017
+ $this->encryptIV = $xor;
1018
+ if ($start = strlen($plaintext) % $block_size) {
1019
+ $buffer['xor'] = substr($key, $start) . $buffer['xor'];
1020
+ }
1021
+ }
1022
+ break;
1023
+ case CRYPT_MODE_STREAM:
1024
+ $ciphertext = $this->_encryptBlock($plaintext);
1025
+ break;
1026
+ }
1027
+
1028
+ return $ciphertext;
1029
+ }
1030
+
1031
+ /**
1032
+ * Decrypts a message.
1033
+ *
1034
+ * If strlen($ciphertext) is not a multiple of the block size, null bytes will be added to the end of the string until
1035
+ * it is.
1036
+ *
1037
+ * @see self::encrypt()
1038
+ * @access public
1039
+ * @param string $ciphertext
1040
+ * @return string $plaintext
1041
+ * @internal Could, but not must, extend by the child Crypt_* class
1042
+ */
1043
+ function decrypt($ciphertext)
1044
+ {
1045
+ if ($this->paddable) {
1046
+ // we pad with chr(0) since that's what mcrypt_generic does. to quote from {@link http://www.php.net/function.mcrypt-generic}:
1047
+ // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
1048
+ $ciphertext = str_pad($ciphertext, strlen($ciphertext) + ($this->block_size - strlen($ciphertext) % $this->block_size) % $this->block_size, chr(0));
1049
+ }
1050
+
1051
+ if ($this->engine === CRYPT_ENGINE_OPENSSL) {
1052
+ if ($this->changed) {
1053
+ $this->_clearBuffers();
1054
+ $this->changed = false;
1055
+ }
1056
+ switch ($this->mode) {
1057
+ case CRYPT_MODE_STREAM:
1058
+ $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
1059
+ break;
1060
+ case CRYPT_MODE_ECB:
1061
+ if (!defined('OPENSSL_RAW_DATA')) {
1062
+ $ciphertext.= openssl_encrypt('', $this->cipher_name_openssl_ecb, $this->key, true);
1063
+ }
1064
+ $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
1065
+ break;
1066
+ case CRYPT_MODE_CBC:
1067
+ if (!defined('OPENSSL_RAW_DATA')) {
1068
+ $padding = str_repeat(chr($this->block_size), $this->block_size) ^ substr($ciphertext, -$this->block_size);
1069
+ $ciphertext.= substr(openssl_encrypt($padding, $this->cipher_name_openssl_ecb, $this->key, true), 0, $this->block_size);
1070
+ $offset = 2 * $this->block_size;
1071
+ } else {
1072
+ $offset = $this->block_size;
1073
+ }
1074
+ $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->decryptIV);
1075
+ if ($this->continuousBuffer) {
1076
+ $this->decryptIV = substr($ciphertext, -$offset, $this->block_size);
1077
+ }
1078
+ break;
1079
+ case CRYPT_MODE_CTR:
1080
+ $plaintext = $this->_openssl_ctr_process($ciphertext, $this->decryptIV, $this->debuffer);
1081
+ break;
1082
+ case CRYPT_MODE_CFB:
1083
+ // cfb loosely routines inspired by openssl's:
1084
+ // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
1085
+ $plaintext = '';
1086
+ if ($this->continuousBuffer) {
1087
+ $iv = &$this->decryptIV;
1088
+ $pos = &$this->buffer['pos'];
1089
+ } else {
1090
+ $iv = $this->decryptIV;
1091
+ $pos = 0;
1092
+ }
1093
+ $len = strlen($ciphertext);
1094
+ $i = 0;
1095
+ if ($pos) {
1096
+ $orig_pos = $pos;
1097
+ $max = $this->block_size - $pos;
1098
+ if ($len >= $max) {
1099
+ $i = $max;
1100
+ $len-= $max;
1101
+ $pos = 0;
1102
+ } else {
1103
+ $i = $len;
1104
+ $pos+= $len;
1105
+ $len = 0;
1106
+ }
1107
+ // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $this->blocksize
1108
+ $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
1109
+ $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
1110
+ $ciphertext = substr($ciphertext, $i);
1111
+ }
1112
+ $overflow = $len % $this->block_size;
1113
+ if ($overflow) {
1114
+ $plaintext.= openssl_decrypt(substr($ciphertext, 0, -$overflow), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
1115
+ if ($len - $overflow) {
1116
+ $iv = substr($ciphertext, -$overflow - $this->block_size, -$overflow);
1117
+ }
1118
+ $iv = openssl_encrypt(str_repeat("\0", $this->block_size), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
1119
+ $plaintext.= $iv ^ substr($ciphertext, -$overflow);
1120
+ $iv = substr_replace($iv, substr($ciphertext, -$overflow), 0, $overflow);
1121
+ $pos = $overflow;
1122
+ } elseif ($len) {
1123
+ $plaintext.= openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
1124
+ $iv = substr($ciphertext, -$this->block_size);
1125
+ }
1126
+ break;
1127
+ case CRYPT_MODE_OFB:
1128
+ $plaintext = $this->_openssl_ofb_process($ciphertext, $this->decryptIV, $this->debuffer);
1129
+ }
1130
+
1131
+ return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
1132
+ }
1133
+
1134
+ if ($this->engine === CRYPT_ENGINE_MCRYPT) {
1135
+ $block_size = $this->block_size;
1136
+ if ($this->changed) {
1137
+ $this->_setupMcrypt();
1138
+ $this->changed = false;
1139
+ }
1140
+ if ($this->dechanged) {
1141
+ @mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
1142
+ $this->dechanged = false;
1143
+ }
1144
+
1145
+ if ($this->mode == CRYPT_MODE_CFB && $this->continuousBuffer) {
1146
+ $iv = &$this->decryptIV;
1147
+ $pos = &$this->debuffer['pos'];
1148
+ $len = strlen($ciphertext);
1149
+ $plaintext = '';
1150
+ $i = 0;
1151
+ if ($pos) {
1152
+ $orig_pos = $pos;
1153
+ $max = $block_size - $pos;
1154
+ if ($len >= $max) {
1155
+ $i = $max;
1156
+ $len-= $max;
1157
+ $pos = 0;
1158
+ } else {
1159
+ $i = $len;
1160
+ $pos+= $len;
1161
+ $len = 0;
1162
+ }
1163
+ // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
1164
+ $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
1165
+ $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
1166
+ }
1167
+ if ($len >= $block_size) {
1168
+ $cb = substr($ciphertext, $i, $len - $len % $block_size);
1169
+ $plaintext.= @mcrypt_generic($this->ecb, $iv . $cb) ^ $cb;
1170
+ $iv = substr($cb, -$block_size);
1171
+ $len%= $block_size;
1172
+ }
1173
+ if ($len) {
1174
+ $iv = @mcrypt_generic($this->ecb, $iv);
1175
+ $plaintext.= $iv ^ substr($ciphertext, -$len);
1176
+ $iv = substr_replace($iv, substr($ciphertext, -$len), 0, $len);
1177
+ $pos = $len;
1178
+ }
1179
+
1180
+ return $plaintext;
1181
+ }
1182
+
1183
+ $plaintext = @mdecrypt_generic($this->demcrypt, $ciphertext);
1184
+
1185
+ if (!$this->continuousBuffer) {
1186
+ @mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
1187
+ }
1188
+
1189
+ return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
1190
+ }
1191
+
1192
+ if ($this->changed) {
1193
+ $this->_setup();
1194
+ $this->changed = false;
1195
+ }
1196
+ if ($this->use_inline_crypt) {
1197
+ $inline = $this->inline_crypt;
1198
+ return $inline('decrypt', $this, $ciphertext);
1199
+ }
1200
+
1201
+ $block_size = $this->block_size;
1202
+
1203
+ $buffer = &$this->debuffer;
1204
+ $plaintext = '';
1205
+ switch ($this->mode) {
1206
+ case CRYPT_MODE_ECB:
1207
+ for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
1208
+ $plaintext.= $this->_decryptBlock(substr($ciphertext, $i, $block_size));
1209
+ }
1210
+ break;
1211
+ case CRYPT_MODE_CBC:
1212
+ $xor = $this->decryptIV;
1213
+ for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
1214
+ $block = substr($ciphertext, $i, $block_size);
1215
+ $plaintext.= $this->_decryptBlock($block) ^ $xor;
1216
+ $xor = $block;
1217
+ }
1218
+ if ($this->continuousBuffer) {
1219
+ $this->decryptIV = $xor;
1220
+ }
1221
+ break;
1222
+ case CRYPT_MODE_CTR:
1223
+ $xor = $this->decryptIV;
1224
+ if (strlen($buffer['ciphertext'])) {
1225
+ for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
1226
+ $block = substr($ciphertext, $i, $block_size);
1227
+ if (strlen($block) > strlen($buffer['ciphertext'])) {
1228
+ $buffer['ciphertext'].= $this->_encryptBlock($xor);
1229
+ $this->_increment_str($xor);
1230
+ }
1231
+ $key = $this->_string_shift($buffer['ciphertext'], $block_size);
1232
+ $plaintext.= $block ^ $key;
1233
+ }
1234
+ } else {
1235
+ for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
1236
+ $block = substr($ciphertext, $i, $block_size);
1237
+ $key = $this->_encryptBlock($xor);
1238
+ $this->_increment_str($xor);
1239
+ $plaintext.= $block ^ $key;
1240
+ }
1241
+ }
1242
+ if ($this->continuousBuffer) {
1243
+ $this->decryptIV = $xor;
1244
+ if ($start = strlen($ciphertext) % $block_size) {
1245
+ $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
1246
+ }
1247
+ }
1248
+ break;
1249
+ case CRYPT_MODE_CFB:
1250
+ if ($this->continuousBuffer) {
1251
+ $iv = &$this->decryptIV;
1252
+ $pos = &$buffer['pos'];
1253
+ } else {
1254
+ $iv = $this->decryptIV;
1255
+ $pos = 0;
1256
+ }
1257
+ $len = strlen($ciphertext);
1258
+ $i = 0;
1259
+ if ($pos) {
1260
+ $orig_pos = $pos;
1261
+ $max = $block_size - $pos;
1262
+ if ($len >= $max) {
1263
+ $i = $max;
1264
+ $len-= $max;
1265
+ $pos = 0;
1266
+ } else {
1267
+ $i = $len;
1268
+ $pos+= $len;
1269
+ $len = 0;
1270
+ }
1271
+ // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
1272
+ $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
1273
+ $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
1274
+ }
1275
+ while ($len >= $block_size) {
1276
+ $iv = $this->_encryptBlock($iv);
1277
+ $cb = substr($ciphertext, $i, $block_size);
1278
+ $plaintext.= $iv ^ $cb;
1279
+ $iv = $cb;
1280
+ $len-= $block_size;
1281
+ $i+= $block_size;
1282
+ }
1283
+ if ($len) {
1284
+ $iv = $this->_encryptBlock($iv);
1285
+ $plaintext.= $iv ^ substr($ciphertext, $i);
1286
+ $iv = substr_replace($iv, substr($ciphertext, $i), 0, $len);
1287
+ $pos = $len;
1288
+ }
1289
+ break;
1290
+ case CRYPT_MODE_OFB:
1291
+ $xor = $this->decryptIV;
1292
+ if (strlen($buffer['xor'])) {
1293
+ for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
1294
+ $block = substr($ciphertext, $i, $block_size);
1295
+ if (strlen($block) > strlen($buffer['xor'])) {
1296
+ $xor = $this->_encryptBlock($xor);
1297
+ $buffer['xor'].= $xor;
1298
+ }
1299
+ $key = $this->_string_shift($buffer['xor'], $block_size);
1300
+ $plaintext.= $block ^ $key;
1301
+ }
1302
+ } else {
1303
+ for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
1304
+ $xor = $this->_encryptBlock($xor);
1305
+ $plaintext.= substr($ciphertext, $i, $block_size) ^ $xor;
1306
+ }
1307
+ $key = $xor;
1308
+ }
1309
+ if ($this->continuousBuffer) {
1310
+ $this->decryptIV = $xor;
1311
+ if ($start = strlen($ciphertext) % $block_size) {
1312
+ $buffer['xor'] = substr($key, $start) . $buffer['xor'];
1313
+ }
1314
+ }
1315
+ break;
1316
+ case CRYPT_MODE_STREAM:
1317
+ $plaintext = $this->_decryptBlock($ciphertext);
1318
+ break;
1319
+ }
1320
+ return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
1321
+ }
1322
+
1323
+ /**
1324
+ * OpenSSL CTR Processor
1325
+ *
1326
+ * PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream
1327
+ * for CTR is the same for both encrypting and decrypting this function is re-used by both Crypt_Base::encrypt()
1328
+ * and Crypt_Base::decrypt(). Also, OpenSSL doesn't implement CTR for all of it's symmetric ciphers so this
1329
+ * function will emulate CTR with ECB when necessary.
1330
+ *
1331
+ * @see self::encrypt()
1332
+ * @see self::decrypt()
1333
+ * @param string $plaintext
1334
+ * @param string $encryptIV
1335
+ * @param array $buffer
1336
+ * @return string
1337
+ * @access private
1338
+ */
1339
+ function _openssl_ctr_process($plaintext, &$encryptIV, &$buffer)
1340
+ {
1341
+ $ciphertext = '';
1342
+
1343
+ $block_size = $this->block_size;
1344
+ $key = $this->key;
1345
+
1346
+ if ($this->openssl_emulate_ctr) {
1347
+ $xor = $encryptIV;
1348
+ if (strlen($buffer['ciphertext'])) {
1349
+ for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
1350
+ $block = substr($plaintext, $i, $block_size);
1351
+ if (strlen($block) > strlen($buffer['ciphertext'])) {
1352
+ $result = openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
1353
+ $result = !defined('OPENSSL_RAW_DATA') ? substr($result, 0, -$this->block_size) : $result;
1354
+ $buffer['ciphertext'].= $result;
1355
+ }
1356
+ $this->_increment_str($xor);
1357
+ $otp = $this->_string_shift($buffer['ciphertext'], $block_size);
1358
+ $ciphertext.= $block ^ $otp;
1359
+ }
1360
+ } else {
1361
+ for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
1362
+ $block = substr($plaintext, $i, $block_size);
1363
+ $otp = openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
1364
+ $otp = !defined('OPENSSL_RAW_DATA') ? substr($otp, 0, -$this->block_size) : $otp;
1365
+ $this->_increment_str($xor);
1366
+ $ciphertext.= $block ^ $otp;
1367
+ }
1368
+ }
1369
+ if ($this->continuousBuffer) {
1370
+ $encryptIV = $xor;
1371
+ if ($start = strlen($plaintext) % $block_size) {
1372
+ $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
1373
+ }
1374
+ }
1375
+
1376
+ return $ciphertext;
1377
+ }
1378
+
1379
+ if (strlen($buffer['ciphertext'])) {
1380
+ $ciphertext = $plaintext ^ $this->_string_shift($buffer['ciphertext'], strlen($plaintext));
1381
+ $plaintext = substr($plaintext, strlen($ciphertext));
1382
+
1383
+ if (!strlen($plaintext)) {
1384
+ return $ciphertext;
1385
+ }
1386
+ }
1387
+
1388
+ $overflow = strlen($plaintext) % $block_size;
1389
+ if ($overflow) {
1390
+ $plaintext2 = $this->_string_pop($plaintext, $overflow); // ie. trim $plaintext to a multiple of $block_size and put rest of $plaintext in $plaintext2
1391
+ $encrypted = openssl_encrypt($plaintext . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
1392
+ $temp = $this->_string_pop($encrypted, $block_size);
1393
+ $ciphertext.= $encrypted . ($plaintext2 ^ $temp);
1394
+ if ($this->continuousBuffer) {
1395
+ $buffer['ciphertext'] = substr($temp, $overflow);
1396
+ $encryptIV = $temp;
1397
+ }
1398
+ } elseif (!strlen($buffer['ciphertext'])) {
1399
+ $ciphertext.= openssl_encrypt($plaintext . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
1400
+ $temp = $this->_string_pop($ciphertext, $block_size);
1401
+ if ($this->continuousBuffer) {
1402
+ $encryptIV = $temp;
1403
+ }
1404
+ }
1405
+ if ($this->continuousBuffer) {
1406
+ if (!defined('OPENSSL_RAW_DATA')) {
1407
+ $encryptIV.= openssl_encrypt('', $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
1408
+ }
1409
+ $encryptIV = openssl_decrypt($encryptIV, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
1410
+ if ($overflow) {
1411
+ $this->_increment_str($encryptIV);
1412
+ }
1413
+ }
1414
+
1415
+ return $ciphertext;
1416
+ }
1417
+
1418
+ /**
1419
+ * OpenSSL OFB Processor
1420
+ *
1421
+ * PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream
1422
+ * for OFB is the same for both encrypting and decrypting this function is re-used by both Crypt_Base::encrypt()
1423
+ * and Crypt_Base::decrypt().
1424
+ *
1425
+ * @see self::encrypt()
1426
+ * @see self::decrypt()
1427
+ * @param string $plaintext
1428
+ * @param string $encryptIV
1429
+ * @param array $buffer
1430
+ * @return string
1431
+ * @access private
1432
+ */
1433
+ function _openssl_ofb_process($plaintext, &$encryptIV, &$buffer)
1434
+ {
1435
+ if (strlen($buffer['xor'])) {
1436
+ $ciphertext = $plaintext ^ $buffer['xor'];
1437
+ $buffer['xor'] = substr($buffer['xor'], strlen($ciphertext));
1438
+ $plaintext = substr($plaintext, strlen($ciphertext));
1439
+ } else {
1440
+ $ciphertext = '';
1441
+ }
1442
+
1443
+ $block_size = $this->block_size;
1444
+
1445
+ $len = strlen($plaintext);
1446
+ $key = $this->key;
1447
+ $overflow = $len % $block_size;
1448
+
1449
+ if (strlen($plaintext)) {
1450
+ if ($overflow) {
1451
+ $ciphertext.= openssl_encrypt(substr($plaintext, 0, -$overflow) . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
1452
+ $xor = $this->_string_pop($ciphertext, $block_size);
1453
+ if ($this->continuousBuffer) {
1454
+ $encryptIV = $xor;
1455
+ }
1456
+ $ciphertext.= $this->_string_shift($xor, $overflow) ^ substr($plaintext, -$overflow);
1457
+ if ($this->continuousBuffer) {
1458
+ $buffer['xor'] = $xor;
1459
+ }
1460
+ } else {
1461
+ $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
1462
+ if ($this->continuousBuffer) {
1463
+ $encryptIV = substr($ciphertext, -$block_size) ^ substr($plaintext, -$block_size);
1464
+ }
1465
+ }
1466
+ }
1467
+
1468
+ return $ciphertext;
1469
+ }
1470
+
1471
+ /**
1472
+ * phpseclib <-> OpenSSL Mode Mapper
1473
+ *
1474
+ * May need to be overwritten by classes extending this one in some cases
1475
+ *
1476
+ * @return int
1477
+ * @access private
1478
+ */
1479
+ function _openssl_translate_mode()
1480
+ {
1481
+ switch ($this->mode) {
1482
+ case CRYPT_MODE_ECB:
1483
+ return 'ecb';
1484
+ case CRYPT_MODE_CBC:
1485
+ return 'cbc';
1486
+ case CRYPT_MODE_CTR:
1487
+ return 'ctr';
1488
+ case CRYPT_MODE_CFB:
1489
+ return 'cfb';
1490
+ case CRYPT_MODE_OFB:
1491
+ return 'ofb';
1492
+ }
1493
+ }
1494
+
1495
+ /**
1496
+ * Pad "packets".
1497
+ *
1498
+ * Block ciphers working by encrypting between their specified [$this->]block_size at a time
1499
+ * If you ever need to encrypt or decrypt something that isn't of the proper length, it becomes necessary to
1500
+ * pad the input so that it is of the proper length.
1501
+ *
1502
+ * Padding is enabled by default. Sometimes, however, it is undesirable to pad strings. Such is the case in SSH,
1503
+ * where "packets" are padded with random bytes before being encrypted. Unpad these packets and you risk stripping
1504
+ * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
1505
+ * transmitted separately)
1506
+ *
1507
+ * @see self::disablePadding()
1508
+ * @access public
1509
+ */
1510
+ function enablePadding()
1511
+ {
1512
+ $this->padding = true;
1513
+ }
1514
+
1515
+ /**
1516
+ * Do not pad packets.
1517
+ *
1518
+ * @see self::enablePadding()
1519
+ * @access public
1520
+ */
1521
+ function disablePadding()
1522
+ {
1523
+ $this->padding = false;
1524
+ }
1525
+
1526
+ /**
1527
+ * Treat consecutive "packets" as if they are a continuous buffer.
1528
+ *
1529
+ * Say you have a 32-byte plaintext $plaintext. Using the default behavior, the two following code snippets
1530
+ * will yield different outputs:
1531
+ *
1532
+ * <code>
1533
+ * echo $rijndael->encrypt(substr($plaintext, 0, 16));
1534
+ * echo $rijndael->encrypt(substr($plaintext, 16, 16));
1535
+ * </code>
1536
+ * <code>
1537
+ * echo $rijndael->encrypt($plaintext);
1538
+ * </code>
1539
+ *
1540
+ * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates
1541
+ * another, as demonstrated with the following:
1542
+ *
1543
+ * <code>
1544
+ * $rijndael->encrypt(substr($plaintext, 0, 16));
1545
+ * echo $rijndael->decrypt($rijndael->encrypt(substr($plaintext, 16, 16)));
1546
+ * </code>
1547
+ * <code>
1548
+ * echo $rijndael->decrypt($rijndael->encrypt(substr($plaintext, 16, 16)));
1549
+ * </code>
1550
+ *
1551
+ * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different
1552
+ * outputs. The reason is due to the fact that the initialization vector's change after every encryption /
1553
+ * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant.
1554
+ *
1555
+ * Put another way, when the continuous buffer is enabled, the state of the Crypt_*() object changes after each
1556
+ * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that
1557
+ * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them),
1558
+ * however, they are also less intuitive and more likely to cause you problems.
1559
+ *
1560
+ * @see self::disableContinuousBuffer()
1561
+ * @access public
1562
+ * @internal Could, but not must, extend by the child Crypt_* class
1563
+ */
1564
+ function enableContinuousBuffer()
1565
+ {
1566
+ if ($this->mode == CRYPT_MODE_ECB) {
1567
+ return;
1568
+ }
1569
+
1570
+ $this->continuousBuffer = true;
1571
+
1572
+ $this->_setEngine();
1573
+ }
1574
+
1575
+ /**
1576
+ * Treat consecutive packets as if they are a discontinuous buffer.
1577
+ *
1578
+ * The default behavior.
1579
+ *
1580
+ * @see self::enableContinuousBuffer()
1581
+ * @access public
1582
+ * @internal Could, but not must, extend by the child Crypt_* class
1583
+ */
1584
+ function disableContinuousBuffer()
1585
+ {
1586
+ if ($this->mode == CRYPT_MODE_ECB) {
1587
+ return;
1588
+ }
1589
+ if (!$this->continuousBuffer) {
1590
+ return;
1591
+ }
1592
+
1593
+ $this->continuousBuffer = false;
1594
+ $this->changed = true;
1595
+
1596
+ $this->_setEngine();
1597
+ }
1598
+
1599
+ /**
1600
+ * Test for engine validity
1601
+ *
1602
+ * @see self::Crypt_Base()
1603
+ * @param int $engine
1604
+ * @access public
1605
+ * @return bool
1606
+ */
1607
+ function isValidEngine($engine)
1608
+ {
1609
+ switch ($engine) {
1610
+ case CRYPT_ENGINE_OPENSSL:
1611
+ if ($this->mode == CRYPT_MODE_STREAM && $this->continuousBuffer) {
1612
+ return false;
1613
+ }
1614
+ $this->openssl_emulate_ctr = false;
1615
+ $result = $this->cipher_name_openssl &&
1616
+ extension_loaded('openssl') &&
1617
+ // PHP 5.3.0 - 5.3.2 did not let you set IV's
1618
+ version_compare(PHP_VERSION, '5.3.3', '>=');
1619
+ if (!$result) {
1620
+ return false;
1621
+ }
1622
+
1623
+ // prior to PHP 5.4.0 OPENSSL_RAW_DATA and OPENSSL_ZERO_PADDING were not defined. instead of expecting an integer
1624
+ // $options openssl_encrypt expected a boolean $raw_data.
1625
+ if (!defined('OPENSSL_RAW_DATA')) {
1626
+ $this->openssl_options = true;
1627
+ } else {
1628
+ $this->openssl_options = OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING;
1629
+ }
1630
+
1631
+ $methods = openssl_get_cipher_methods();
1632
+ if (in_array($this->cipher_name_openssl, $methods)) {
1633
+ return true;
1634
+ }
1635
+ // not all of openssl's symmetric cipher's support ctr. for those
1636
+ // that don't we'll emulate it
1637
+ switch ($this->mode) {
1638
+ case CRYPT_MODE_CTR:
1639
+ if (in_array($this->cipher_name_openssl_ecb, $methods)) {
1640
+ $this->openssl_emulate_ctr = true;
1641
+ return true;
1642
+ }
1643
+ }
1644
+ return false;
1645
+ case CRYPT_ENGINE_MCRYPT:
1646
+ return $this->cipher_name_mcrypt &&
1647
+ extension_loaded('mcrypt') &&
1648
+ in_array($this->cipher_name_mcrypt, @mcrypt_list_algorithms());
1649
+ case CRYPT_ENGINE_INTERNAL:
1650
+ return true;
1651
+ }
1652
+
1653
+ return false;
1654
+ }
1655
+
1656
+ /**
1657
+ * Sets the preferred crypt engine
1658
+ *
1659
+ * Currently, $engine could be:
1660
+ *
1661
+ * - CRYPT_ENGINE_OPENSSL [very fast]
1662
+ *
1663
+ * - CRYPT_ENGINE_MCRYPT [fast]
1664
+ *
1665
+ * - CRYPT_ENGINE_INTERNAL [slow]
1666
+ *
1667
+ * If the preferred crypt engine is not available the fastest available one will be used
1668
+ *
1669
+ * @see self::Crypt_Base()
1670
+ * @param int $engine
1671
+ * @access public
1672
+ */
1673
+ function setPreferredEngine($engine)
1674
+ {
1675
+ switch ($engine) {
1676
+ //case CRYPT_ENGINE_OPENSSL:
1677
+ case CRYPT_ENGINE_MCRYPT:
1678
+ case CRYPT_ENGINE_INTERNAL:
1679
+ $this->preferredEngine = $engine;
1680
+ break;
1681
+ default:
1682
+ $this->preferredEngine = CRYPT_ENGINE_OPENSSL;
1683
+ }
1684
+
1685
+ $this->_setEngine();
1686
+ }
1687
+
1688
+ /**
1689
+ * Returns the engine currently being utilized
1690
+ *
1691
+ * @see self::_setEngine()
1692
+ * @access public
1693
+ */
1694
+ function getEngine()
1695
+ {
1696
+ return $this->engine;
1697
+ }
1698
+
1699
+ /**
1700
+ * Sets the engine as appropriate
1701
+ *
1702
+ * @see self::Crypt_Base()
1703
+ * @access private
1704
+ */
1705
+ function _setEngine()
1706
+ {
1707
+ $this->engine = null;
1708
+
1709
+ $candidateEngines = array(
1710
+ $this->preferredEngine,
1711
+ CRYPT_ENGINE_OPENSSL,
1712
+ CRYPT_ENGINE_MCRYPT
1713
+ );
1714
+ foreach ($candidateEngines as $engine) {
1715
+ if ($this->isValidEngine($engine)) {
1716
+ $this->engine = $engine;
1717
+ break;
1718
+ }
1719
+ }
1720
+ if (!$this->engine) {
1721
+ $this->engine = CRYPT_ENGINE_INTERNAL;
1722
+ }
1723
+
1724
+ if ($this->engine != CRYPT_ENGINE_MCRYPT && $this->enmcrypt) {
1725
+ // Closing the current mcrypt resource(s). _mcryptSetup() will, if needed,
1726
+ // (re)open them with the module named in $this->cipher_name_mcrypt
1727
+ @mcrypt_module_close($this->enmcrypt);
1728
+ @mcrypt_module_close($this->demcrypt);
1729
+ $this->enmcrypt = null;
1730
+ $this->demcrypt = null;
1731
+
1732
+ if ($this->ecb) {
1733
+ @mcrypt_module_close($this->ecb);
1734
+ $this->ecb = null;
1735
+ }
1736
+ }
1737
+
1738
+ $this->changed = true;
1739
+ }
1740
+
1741
+ /**
1742
+ * Encrypts a block
1743
+ *
1744
+ * @access private
1745
+ * @param string $in
1746
+ * @return string
1747
+ * @internal Must be extended by the child Crypt_* class
1748
+ */
1749
+ function _encryptBlock($in)
1750
+ {
1751
+ user_error((version_compare(PHP_VERSION, '5.0.0', '>=') ? __METHOD__ : __FUNCTION__) . '() must extend by class ' . get_class($this), E_USER_ERROR);
1752
+ }
1753
+
1754
+ /**
1755
+ * Decrypts a block
1756
+ *
1757
+ * @access private
1758
+ * @param string $in
1759
+ * @return string
1760
+ * @internal Must be extended by the child Crypt_* class
1761
+ */
1762
+ function _decryptBlock($in)
1763
+ {
1764
+ user_error((version_compare(PHP_VERSION, '5.0.0', '>=') ? __METHOD__ : __FUNCTION__) . '() must extend by class ' . get_class($this), E_USER_ERROR);
1765
+ }
1766
+
1767
+ /**
1768
+ * Setup the key (expansion)
1769
+ *
1770
+ * Only used if $engine == CRYPT_ENGINE_INTERNAL
1771
+ *
1772
+ * @see self::_setup()
1773
+ * @access private
1774
+ * @internal Must be extended by the child Crypt_* class
1775
+ */
1776
+ function _setupKey()
1777
+ {
1778
+ user_error((version_compare(PHP_VERSION, '5.0.0', '>=') ? __METHOD__ : __FUNCTION__) . '() must extend by class ' . get_class($this), E_USER_ERROR);
1779
+ }
1780
+
1781
+ /**
1782
+ * Setup the CRYPT_ENGINE_INTERNAL $engine
1783
+ *
1784
+ * (re)init, if necessary, the internal cipher $engine and flush all $buffers
1785
+ * Used (only) if $engine == CRYPT_ENGINE_INTERNAL
1786
+ *
1787
+ * _setup() will be called each time if $changed === true
1788
+ * typically this happens when using one or more of following public methods:
1789
+ *
1790
+ * - setKey()
1791
+ *
1792
+ * - setIV()
1793
+ *
1794
+ * - disableContinuousBuffer()
1795
+ *
1796
+ * - First run of encrypt() / decrypt() with no init-settings
1797
+ *
1798
+ * @see self::setKey()
1799
+ * @see self::setIV()
1800
+ * @see self::disableContinuousBuffer()
1801
+ * @access private
1802
+ * @internal _setup() is always called before en/decryption.
1803
+ * @internal Could, but not must, extend by the child Crypt_* class
1804
+ */
1805
+ function _setup()
1806
+ {
1807
+ $this->_clearBuffers();
1808
+ $this->_setupKey();
1809
+
1810
+ if ($this->use_inline_crypt) {
1811
+ $this->_setupInlineCrypt();
1812
+ }
1813
+ }
1814
+
1815
+ /**
1816
+ * Setup the CRYPT_ENGINE_MCRYPT $engine
1817
+ *
1818
+ * (re)init, if necessary, the (ext)mcrypt resources and flush all $buffers
1819
+ * Used (only) if $engine = CRYPT_ENGINE_MCRYPT
1820
+ *
1821
+ * _setupMcrypt() will be called each time if $changed === true
1822
+ * typically this happens when using one or more of following public methods:
1823
+ *
1824
+ * - setKey()
1825
+ *
1826
+ * - setIV()
1827
+ *
1828
+ * - disableContinuousBuffer()
1829
+ *
1830
+ * - First run of encrypt() / decrypt()
1831
+ *
1832
+ * @see self::setKey()
1833
+ * @see self::setIV()
1834
+ * @see self::disableContinuousBuffer()
1835
+ * @access private
1836
+ * @internal Could, but not must, extend by the child Crypt_* class
1837
+ */
1838
+ function _setupMcrypt()
1839
+ {
1840
+ $this->_clearBuffers();
1841
+ $this->enchanged = $this->dechanged = true;
1842
+
1843
+ if (!isset($this->enmcrypt)) {
1844
+ static $mcrypt_modes = array(
1845
+ CRYPT_MODE_CTR => 'ctr',
1846
+ CRYPT_MODE_ECB => MCRYPT_MODE_ECB,
1847
+ CRYPT_MODE_CBC => MCRYPT_MODE_CBC,
1848
+ CRYPT_MODE_CFB => 'ncfb',
1849
+ CRYPT_MODE_OFB => MCRYPT_MODE_NOFB,
1850
+ CRYPT_MODE_STREAM => MCRYPT_MODE_STREAM,
1851
+ );
1852
+
1853
+ $this->demcrypt = @mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');
1854
+ $this->enmcrypt = @mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');
1855
+
1856
+ // we need the $ecb mcrypt resource (only) in MODE_CFB with enableContinuousBuffer()
1857
+ // to workaround mcrypt's broken ncfb implementation in buffered mode
1858
+ // see: {@link http://phpseclib.sourceforge.net/cfb-demo.phps}
1859
+ if ($this->mode == CRYPT_MODE_CFB) {
1860
+ $this->ecb = @mcrypt_module_open($this->cipher_name_mcrypt, '', MCRYPT_MODE_ECB, '');
1861
+ }
1862
+ } // else should mcrypt_generic_deinit be called?
1863
+
1864
+ if ($this->mode == CRYPT_MODE_CFB) {
1865
+ @mcrypt_generic_init($this->ecb, $this->key, str_repeat("\0", $this->block_size));
1866
+ }
1867
+ }
1868
+
1869
+ /**
1870
+ * Pads a string
1871
+ *
1872
+ * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize.
1873
+ * $this->block_size - (strlen($text) % $this->block_size) bytes are added, each of which is equal to
1874
+ * chr($this->block_size - (strlen($text) % $this->block_size)
1875
+ *
1876
+ * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
1877
+ * and padding will, hence forth, be enabled.
1878
+ *
1879
+ * @see self::_unpad()
1880
+ * @param string $text
1881
+ * @access private
1882
+ * @return string
1883
+ */
1884
+ function _pad($text)
1885
+ {
1886
+ $length = strlen($text);
1887
+
1888
+ if (!$this->padding) {
1889
+ if ($length % $this->block_size == 0) {
1890
+ return $text;
1891
+ } else {
1892
+ user_error("The plaintext's length ($length) is not a multiple of the block size ({$this->block_size})");
1893
+ $this->padding = true;
1894
+ }
1895
+ }
1896
+
1897
+ $pad = $this->block_size - ($length % $this->block_size);
1898
+
1899
+ return str_pad($text, $length + $pad, chr($pad));
1900
+ }
1901
+
1902
+ /**
1903
+ * Unpads a string.
1904
+ *
1905
+ * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
1906
+ * and false will be returned.
1907
+ *
1908
+ * @see self::_pad()
1909
+ * @param string $text
1910
+ * @access private
1911
+ * @return string
1912
+ */
1913
+ function _unpad($text)
1914
+ {
1915
+ if (!$this->padding) {
1916
+ return $text;
1917
+ }
1918
+
1919
+ $length = ord($text[strlen($text) - 1]);
1920
+
1921
+ if (!$length || $length > $this->block_size) {
1922
+ return false;
1923
+ }
1924
+
1925
+ return substr($text, 0, -$length);
1926
+ }
1927
+
1928
+ /**
1929
+ * Clears internal buffers
1930
+ *
1931
+ * Clearing/resetting the internal buffers is done everytime
1932
+ * after disableContinuousBuffer() or on cipher $engine (re)init
1933
+ * ie after setKey() or setIV()
1934
+ *
1935
+ * @access public
1936
+ * @internal Could, but not must, extend by the child Crypt_* class
1937
+ */
1938
+ function _clearBuffers()
1939
+ {
1940
+ $this->enbuffer = $this->debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true);
1941
+
1942
+ // mcrypt's handling of invalid's $iv:
1943
+ // $this->encryptIV = $this->decryptIV = strlen($this->iv) == $this->block_size ? $this->iv : str_repeat("\0", $this->block_size);
1944
+ $this->encryptIV = $this->decryptIV = str_pad(substr($this->iv, 0, $this->block_size), $this->block_size, "\0");
1945
+
1946
+ if (!$this->skip_key_adjustment) {
1947
+ $this->key = str_pad(substr($this->key, 0, $this->key_length), $this->key_length, "\0");
1948
+ }
1949
+ }
1950
+
1951
+ /**
1952
+ * String Shift
1953
+ *
1954
+ * Inspired by array_shift
1955
+ *
1956
+ * @param string $string
1957
+ * @param int $index
1958
+ * @access private
1959
+ * @return string
1960
+ */
1961
+ function _string_shift(&$string, $index = 1)
1962
+ {
1963
+ $substr = substr($string, 0, $index);
1964
+ $string = substr($string, $index);
1965
+ return $substr;
1966
+ }
1967
+
1968
+ /**
1969
+ * String Pop
1970
+ *
1971
+ * Inspired by array_pop
1972
+ *
1973
+ * @param string $string
1974
+ * @param int $index
1975
+ * @access private
1976
+ * @return string
1977
+ */
1978
+ function _string_pop(&$string, $index = 1)
1979
+ {
1980
+ $substr = substr($string, -$index);
1981
+ $string = substr($string, 0, -$index);
1982
+ return $substr;
1983
+ }
1984
+
1985
+ /**
1986
+ * Increment the current string
1987
+ *
1988
+ * @see self::decrypt()
1989
+ * @see self::encrypt()
1990
+ * @param string $var
1991
+ * @access private
1992
+ */
1993
+ function _increment_str(&$var)
1994
+ {
1995
+ for ($i = 4; $i <= strlen($var); $i+= 4) {
1996
+ $temp = substr($var, -$i, 4);
1997
+ switch ($temp) {
1998
+ case "\xFF\xFF\xFF\xFF":
1999
+ $var = substr_replace($var, "\x00\x00\x00\x00", -$i, 4);
2000
+ break;
2001
+ case "\x7F\xFF\xFF\xFF":
2002
+ $var = substr_replace($var, "\x80\x00\x00\x00", -$i, 4);
2003
+ return;
2004
+ default:
2005
+ $temp = unpack('Nnum', $temp);
2006
+ $var = substr_replace($var, pack('N', $temp['num'] + 1), -$i, 4);
2007
+ return;
2008
+ }
2009
+ }
2010
+
2011
+ $remainder = strlen($var) % 4;
2012
+
2013
+ if ($remainder == 0) {
2014
+ return;
2015
+ }
2016
+
2017
+ $temp = unpack('Nnum', str_pad(substr($var, 0, $remainder), 4, "\0", STR_PAD_LEFT));
2018
+ $temp = substr(pack('N', $temp['num'] + 1), -$remainder);
2019
+ $var = substr_replace($var, $temp, 0, $remainder);
2020
+ }
2021
+
2022
+ /**
2023
+ * Setup the performance-optimized function for de/encrypt()
2024
+ *
2025
+ * Stores the created (or existing) callback function-name
2026
+ * in $this->inline_crypt
2027
+ *
2028
+ * Internally for phpseclib developers:
2029
+ *
2030
+ * _setupInlineCrypt() would be called only if:
2031
+ *
2032
+ * - $engine == CRYPT_ENGINE_INTERNAL and
2033
+ *
2034
+ * - $use_inline_crypt === true
2035
+ *
2036
+ * - each time on _setup(), after(!) _setupKey()
2037
+ *
2038
+ *
2039
+ * This ensures that _setupInlineCrypt() has always a
2040
+ * full ready2go initializated internal cipher $engine state
2041
+ * where, for example, the keys allready expanded,
2042
+ * keys/block_size calculated and such.
2043
+ *
2044
+ * It is, each time if called, the responsibility of _setupInlineCrypt():
2045
+ *
2046
+ * - to set $this->inline_crypt to a valid and fully working callback function
2047
+ * as a (faster) replacement for encrypt() / decrypt()
2048
+ *
2049
+ * - NOT to create unlimited callback functions (for memory reasons!)
2050
+ * no matter how often _setupInlineCrypt() would be called. At some
2051
+ * point of amount they must be generic re-useable.
2052
+ *
2053
+ * - the code of _setupInlineCrypt() it self,
2054
+ * and the generated callback code,
2055
+ * must be, in following order:
2056
+ * - 100% safe
2057
+ * - 100% compatible to encrypt()/decrypt()
2058
+ * - using only php5+ features/lang-constructs/php-extensions if
2059
+ * compatibility (down to php4) or fallback is provided
2060
+ * - readable/maintainable/understandable/commented and... not-cryptic-styled-code :-)
2061
+ * - >= 10% faster than encrypt()/decrypt() [which is, by the way,
2062
+ * the reason for the existence of _setupInlineCrypt() :-)]
2063
+ * - memory-nice
2064
+ * - short (as good as possible)
2065
+ *
2066
+ * Note: - _setupInlineCrypt() is using _createInlineCryptFunction() to create the full callback function code.
2067
+ * - In case of using inline crypting, _setupInlineCrypt() must extend by the child Crypt_* class.
2068
+ * - The following variable names are reserved:
2069
+ * - $_* (all variable names prefixed with an underscore)
2070
+ * - $self (object reference to it self. Do not use $this, but $self instead)
2071
+ * - $in (the content of $in has to en/decrypt by the generated code)
2072
+ * - The callback function should not use the 'return' statement, but en/decrypt'ing the content of $in only
2073
+ *
2074
+ *
2075
+ * @see self::_setup()
2076
+ * @see self::_createInlineCryptFunction()
2077
+ * @see self::encrypt()
2078
+ * @see self::decrypt()
2079
+ * @access private
2080
+ * @internal If a Crypt_* class providing inline crypting it must extend _setupInlineCrypt()
2081
+ */
2082
+ function _setupInlineCrypt()
2083
+ {
2084
+ // If, for any reason, an extending Crypt_Base() Crypt_* class
2085
+ // not using inline crypting then it must be ensured that: $this->use_inline_crypt = false
2086
+ // ie in the class var declaration of $use_inline_crypt in general for the Crypt_* class,
2087
+ // in the constructor at object instance-time
2088
+ // or, if it's runtime-specific, at runtime
2089
+
2090
+ $this->use_inline_crypt = false;
2091
+ }
2092
+
2093
+ /**
2094
+ * Creates the performance-optimized function for en/decrypt()
2095
+ *
2096
+ * Internally for phpseclib developers:
2097
+ *
2098
+ * _createInlineCryptFunction():
2099
+ *
2100
+ * - merge the $cipher_code [setup'ed by _setupInlineCrypt()]
2101
+ * with the current [$this->]mode of operation code
2102
+ *
2103
+ * - create the $inline function, which called by encrypt() / decrypt()
2104
+ * as its replacement to speed up the en/decryption operations.
2105
+ *
2106
+ * - return the name of the created $inline callback function
2107
+ *
2108
+ * - used to speed up en/decryption
2109
+ *
2110
+ *
2111
+ *
2112
+ * The main reason why can speed up things [up to 50%] this way are:
2113
+ *
2114
+ * - using variables more effective then regular.
2115
+ * (ie no use of expensive arrays but integers $k_0, $k_1 ...
2116
+ * or even, for example, the pure $key[] values hardcoded)
2117
+ *
2118
+ * - avoiding 1000's of function calls of ie _encryptBlock()
2119
+ * but inlining the crypt operations.
2120
+ * in the mode of operation for() loop.
2121
+ *
2122
+ * - full loop unroll the (sometimes key-dependent) rounds
2123
+ * avoiding this way ++$i counters and runtime-if's etc...
2124
+ *
2125
+ * The basic code architectur of the generated $inline en/decrypt()
2126
+ * lambda function, in pseudo php, is:
2127
+ *
2128
+ * <code>
2129
+ * +----------------------------------------------------------------------------------------------+
2130
+ * | callback $inline = create_function: |
2131
+ * | lambda_function_0001_crypt_ECB($action, $text) |
2132
+ * | { |
2133
+ * | INSERT PHP CODE OF: |
2134
+ * | $cipher_code['init_crypt']; // general init code. |
2135
+ * | // ie: $sbox'es declarations used for |
2136
+ * | // encrypt and decrypt'ing. |
2137
+ * | |
2138
+ * | switch ($action) { |
2139
+ * | case 'encrypt': |
2140
+ * | INSERT PHP CODE OF: |
2141
+ * | $cipher_code['init_encrypt']; // encrypt sepcific init code. |
2142
+ * | ie: specified $key or $box |
2143
+ * | declarations for encrypt'ing. |
2144
+ * | |
2145
+ * | foreach ($ciphertext) { |
2146
+ * | $in = $block_size of $ciphertext; |
2147
+ * | |
2148
+ * | INSERT PHP CODE OF: |
2149
+ * | $cipher_code['encrypt_block']; // encrypt's (string) $in, which is always: |
2150
+ * | // strlen($in) == $this->block_size |
2151
+ * | // here comes the cipher algorithm in action |
2152
+ * | // for encryption. |
2153
+ * | // $cipher_code['encrypt_block'] has to |
2154
+ * | // encrypt the content of the $in variable |
2155
+ * | |
2156
+ * | $plaintext .= $in; |
2157
+ * | } |
2158
+ * | return $plaintext; |
2159
+ * | |
2160
+ * | case 'decrypt': |
2161
+ * | INSERT PHP CODE OF: |
2162
+ * | $cipher_code['init_decrypt']; // decrypt sepcific init code |
2163
+ * | ie: specified $key or $box |
2164
+ * | declarations for decrypt'ing. |
2165
+ * | foreach ($plaintext) { |
2166
+ * | $in = $block_size of $plaintext; |
2167
+ * | |
2168
+ * | INSERT PHP CODE OF: |
2169
+ * | $cipher_code['decrypt_block']; // decrypt's (string) $in, which is always |
2170
+ * | // strlen($in) == $this->block_size |
2171
+ * | // here comes the cipher algorithm in action |
2172
+ * | // for decryption. |
2173
+ * | // $cipher_code['decrypt_block'] has to |
2174
+ * | // decrypt the content of the $in variable |
2175
+ * | $ciphertext .= $in; |
2176
+ * | } |
2177
+ * | return $ciphertext; |
2178
+ * | } |
2179
+ * | } |
2180
+ * +----------------------------------------------------------------------------------------------+
2181
+ * </code>
2182
+ *
2183
+ * See also the Crypt_*::_setupInlineCrypt()'s for
2184
+ * productive inline $cipher_code's how they works.
2185
+ *
2186
+ * Structure of:
2187
+ * <code>
2188
+ * $cipher_code = array(
2189
+ * 'init_crypt' => (string) '', // optional
2190
+ * 'init_encrypt' => (string) '', // optional
2191
+ * 'init_decrypt' => (string) '', // optional
2192
+ * 'encrypt_block' => (string) '', // required
2193
+ * 'decrypt_block' => (string) '' // required
2194
+ * );
2195
+ * </code>
2196
+ *
2197
+ * @see self::_setupInlineCrypt()
2198
+ * @see self::encrypt()
2199
+ * @see self::decrypt()
2200
+ * @param array $cipher_code
2201
+ * @access private
2202
+ * @return string (the name of the created callback function)
2203
+ */
2204
+ function _createInlineCryptFunction($cipher_code)
2205
+ {
2206
+ $block_size = $this->block_size;
2207
+
2208
+ // optional
2209
+ $init_crypt = isset($cipher_code['init_crypt']) ? $cipher_code['init_crypt'] : '';
2210
+ $init_encrypt = isset($cipher_code['init_encrypt']) ? $cipher_code['init_encrypt'] : '';
2211
+ $init_decrypt = isset($cipher_code['init_decrypt']) ? $cipher_code['init_decrypt'] : '';
2212
+ // required
2213
+ $encrypt_block = $cipher_code['encrypt_block'];
2214
+ $decrypt_block = $cipher_code['decrypt_block'];
2215
+
2216
+ // Generating mode of operation inline code,
2217
+ // merged with the $cipher_code algorithm
2218
+ // for encrypt- and decryption.
2219
+ switch ($this->mode) {
2220
+ case CRYPT_MODE_ECB:
2221
+ $encrypt = $init_encrypt . '
2222
+ $_ciphertext = "";
2223
+ $_plaintext_len = strlen($_text);
2224
+
2225
+ for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
2226
+ $in = substr($_text, $_i, '.$block_size.');
2227
+ '.$encrypt_block.'
2228
+ $_ciphertext.= $in;
2229
+ }
2230
+
2231
+ return $_ciphertext;
2232
+ ';
2233
+
2234
+ $decrypt = $init_decrypt . '
2235
+ $_plaintext = "";
2236
+ $_text = str_pad($_text, strlen($_text) + ('.$block_size.' - strlen($_text) % '.$block_size.') % '.$block_size.', chr(0));
2237
+ $_ciphertext_len = strlen($_text);
2238
+
2239
+ for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
2240
+ $in = substr($_text, $_i, '.$block_size.');
2241
+ '.$decrypt_block.'
2242
+ $_plaintext.= $in;
2243
+ }
2244
+
2245
+ return $self->_unpad($_plaintext);
2246
+ ';
2247
+ break;
2248
+ case CRYPT_MODE_CTR:
2249
+ $encrypt = $init_encrypt . '
2250
+ $_ciphertext = "";
2251
+ $_plaintext_len = strlen($_text);
2252
+ $_xor = $self->encryptIV;
2253
+ $_buffer = &$self->enbuffer;
2254
+ if (strlen($_buffer["ciphertext"])) {
2255
+ for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
2256
+ $_block = substr($_text, $_i, '.$block_size.');
2257
+ if (strlen($_block) > strlen($_buffer["ciphertext"])) {
2258
+ $in = $_xor;
2259
+ '.$encrypt_block.'
2260
+ $self->_increment_str($_xor);
2261
+ $_buffer["ciphertext"].= $in;
2262
+ }
2263
+ $_key = $self->_string_shift($_buffer["ciphertext"], '.$block_size.');
2264
+ $_ciphertext.= $_block ^ $_key;
2265
+ }
2266
+ } else {
2267
+ for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
2268
+ $_block = substr($_text, $_i, '.$block_size.');
2269
+ $in = $_xor;
2270
+ '.$encrypt_block.'
2271
+ $self->_increment_str($_xor);
2272
+ $_key = $in;
2273
+ $_ciphertext.= $_block ^ $_key;
2274
+ }
2275
+ }
2276
+ if ($self->continuousBuffer) {
2277
+ $self->encryptIV = $_xor;
2278
+ if ($_start = $_plaintext_len % '.$block_size.') {
2279
+ $_buffer["ciphertext"] = substr($_key, $_start) . $_buffer["ciphertext"];
2280
+ }
2281
+ }
2282
+
2283
+ return $_ciphertext;
2284
+ ';
2285
+
2286
+ $decrypt = $init_encrypt . '
2287
+ $_plaintext = "";
2288
+ $_ciphertext_len = strlen($_text);
2289
+ $_xor = $self->decryptIV;
2290
+ $_buffer = &$self->debuffer;
2291
+
2292
+ if (strlen($_buffer["ciphertext"])) {
2293
+ for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
2294
+ $_block = substr($_text, $_i, '.$block_size.');
2295
+ if (strlen($_block) > strlen($_buffer["ciphertext"])) {
2296
+ $in = $_xor;
2297
+ '.$encrypt_block.'
2298
+ $self->_increment_str($_xor);
2299
+ $_buffer["ciphertext"].= $in;
2300
+ }
2301
+ $_key = $self->_string_shift($_buffer["ciphertext"], '.$block_size.');
2302
+ $_plaintext.= $_block ^ $_key;
2303
+ }
2304
+ } else {
2305
+ for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
2306
+ $_block = substr($_text, $_i, '.$block_size.');
2307
+ $in = $_xor;
2308
+ '.$encrypt_block.'
2309
+ $self->_increment_str($_xor);
2310
+ $_key = $in;
2311
+ $_plaintext.= $_block ^ $_key;
2312
+ }
2313
+ }
2314
+ if ($self->continuousBuffer) {
2315
+ $self->decryptIV = $_xor;
2316
+ if ($_start = $_ciphertext_len % '.$block_size.') {
2317
+ $_buffer["ciphertext"] = substr($_key, $_start) . $_buffer["ciphertext"];
2318
+ }
2319
+ }
2320
+
2321
+ return $_plaintext;
2322
+ ';
2323
+ break;
2324
+ case CRYPT_MODE_CFB:
2325
+ $encrypt = $init_encrypt . '
2326
+ $_ciphertext = "";
2327
+ $_buffer = &$self->enbuffer;
2328
+
2329
+ if ($self->continuousBuffer) {
2330
+ $_iv = &$self->encryptIV;
2331
+ $_pos = &$_buffer["pos"];
2332
+ } else {
2333
+ $_iv = $self->encryptIV;
2334
+ $_pos = 0;
2335
+ }
2336
+ $_len = strlen($_text);
2337
+ $_i = 0;
2338
+ if ($_pos) {
2339
+ $_orig_pos = $_pos;
2340
+ $_max = '.$block_size.' - $_pos;
2341
+ if ($_len >= $_max) {
2342
+ $_i = $_max;
2343
+ $_len-= $_max;
2344
+ $_pos = 0;
2345
+ } else {
2346
+ $_i = $_len;
2347
+ $_pos+= $_len;
2348
+ $_len = 0;
2349
+ }
2350
+ $_ciphertext = substr($_iv, $_orig_pos) ^ $_text;
2351
+ $_iv = substr_replace($_iv, $_ciphertext, $_orig_pos, $_i);
2352
+ }
2353
+ while ($_len >= '.$block_size.') {
2354
+ $in = $_iv;
2355
+ '.$encrypt_block.';
2356
+ $_iv = $in ^ substr($_text, $_i, '.$block_size.');
2357
+ $_ciphertext.= $_iv;
2358
+ $_len-= '.$block_size.';
2359
+ $_i+= '.$block_size.';
2360
+ }
2361
+ if ($_len) {
2362
+ $in = $_iv;
2363
+ '.$encrypt_block.'
2364
+ $_iv = $in;
2365
+ $_block = $_iv ^ substr($_text, $_i);
2366
+ $_iv = substr_replace($_iv, $_block, 0, $_len);
2367
+ $_ciphertext.= $_block;
2368
+ $_pos = $_len;
2369
+ }
2370
+ return $_ciphertext;
2371
+ ';
2372
+
2373
+ $decrypt = $init_encrypt . '
2374
+ $_plaintext = "";
2375
+ $_buffer = &$self->debuffer;
2376
+
2377
+ if ($self->continuousBuffer) {
2378
+ $_iv = &$self->decryptIV;
2379
+ $_pos = &$_buffer["pos"];
2380
+ } else {
2381
+ $_iv = $self->decryptIV;
2382
+ $_pos = 0;
2383
+ }
2384
+ $_len = strlen($_text);
2385
+ $_i = 0;
2386
+ if ($_pos) {
2387
+ $_orig_pos = $_pos;
2388
+ $_max = '.$block_size.' - $_pos;
2389
+ if ($_len >= $_max) {
2390
+ $_i = $_max;
2391
+ $_len-= $_max;
2392
+ $_pos = 0;
2393
+ } else {
2394
+ $_i = $_len;
2395
+ $_pos+= $_len;
2396
+ $_len = 0;
2397
+ }
2398
+ $_plaintext = substr($_iv, $_orig_pos) ^ $_text;
2399
+ $_iv = substr_replace($_iv, substr($_text, 0, $_i), $_orig_pos, $_i);
2400
+ }
2401
+ while ($_len >= '.$block_size.') {
2402
+ $in = $_iv;
2403
+ '.$encrypt_block.'
2404
+ $_iv = $in;
2405
+ $cb = substr($_text, $_i, '.$block_size.');
2406
+ $_plaintext.= $_iv ^ $cb;
2407
+ $_iv = $cb;
2408
+ $_len-= '.$block_size.';
2409
+ $_i+= '.$block_size.';
2410
+ }
2411
+ if ($_len) {
2412
+ $in = $_iv;
2413
+ '.$encrypt_block.'
2414
+ $_iv = $in;
2415
+ $_plaintext.= $_iv ^ substr($_text, $_i);
2416
+ $_iv = substr_replace($_iv, substr($_text, $_i), 0, $_len);
2417
+ $_pos = $_len;
2418
+ }
2419
+
2420
+ return $_plaintext;
2421
+ ';
2422
+ break;
2423
+ case CRYPT_MODE_OFB:
2424
+ $encrypt = $init_encrypt . '
2425
+ $_ciphertext = "";
2426
+ $_plaintext_len = strlen($_text);
2427
+ $_xor = $self->encryptIV;
2428
+ $_buffer = &$self->enbuffer;
2429
+
2430
+ if (strlen($_buffer["xor"])) {
2431
+ for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
2432
+ $_block = substr($_text, $_i, '.$block_size.');
2433
+ if (strlen($_block) > strlen($_buffer["xor"])) {
2434
+ $in = $_xor;
2435
+ '.$encrypt_block.'
2436
+ $_xor = $in;
2437
+ $_buffer["xor"].= $_xor;
2438
+ }
2439
+ $_key = $self->_string_shift($_buffer["xor"], '.$block_size.');
2440
+ $_ciphertext.= $_block ^ $_key;
2441
+ }
2442
+ } else {
2443
+ for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
2444
+ $in = $_xor;
2445
+ '.$encrypt_block.'
2446
+ $_xor = $in;
2447
+ $_ciphertext.= substr($_text, $_i, '.$block_size.') ^ $_xor;
2448
+ }
2449
+ $_key = $_xor;
2450
+ }
2451
+ if ($self->continuousBuffer) {
2452
+ $self->encryptIV = $_xor;
2453
+ if ($_start = $_plaintext_len % '.$block_size.') {
2454
+ $_buffer["xor"] = substr($_key, $_start) . $_buffer["xor"];
2455
+ }
2456
+ }
2457
+ return $_ciphertext;
2458
+ ';
2459
+
2460
+ $decrypt = $init_encrypt . '
2461
+ $_plaintext = "";
2462
+ $_ciphertext_len = strlen($_text);
2463
+ $_xor = $self->decryptIV;
2464
+ $_buffer = &$self->debuffer;
2465
+
2466
+ if (strlen($_buffer["xor"])) {
2467
+ for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
2468
+ $_block = substr($_text, $_i, '.$block_size.');
2469
+ if (strlen($_block) > strlen($_buffer["xor"])) {
2470
+ $in = $_xor;
2471
+ '.$encrypt_block.'
2472
+ $_xor = $in;
2473
+ $_buffer["xor"].= $_xor;
2474
+ }
2475
+ $_key = $self->_string_shift($_buffer["xor"], '.$block_size.');
2476
+ $_plaintext.= $_block ^ $_key;
2477
+ }
2478
+ } else {
2479
+ for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
2480
+ $in = $_xor;
2481
+ '.$encrypt_block.'
2482
+ $_xor = $in;
2483
+ $_plaintext.= substr($_text, $_i, '.$block_size.') ^ $_xor;
2484
+ }
2485
+ $_key = $_xor;
2486
+ }
2487
+ if ($self->continuousBuffer) {
2488
+ $self->decryptIV = $_xor;
2489
+ if ($_start = $_ciphertext_len % '.$block_size.') {
2490
+ $_buffer["xor"] = substr($_key, $_start) . $_buffer["xor"];
2491
+ }
2492
+ }
2493
+ return $_plaintext;
2494
+ ';
2495
+ break;
2496
+ case CRYPT_MODE_STREAM:
2497
+ $encrypt = $init_encrypt . '
2498
+ $_ciphertext = "";
2499
+ '.$encrypt_block.'
2500
+ return $_ciphertext;
2501
+ ';
2502
+ $decrypt = $init_decrypt . '
2503
+ $_plaintext = "";
2504
+ '.$decrypt_block.'
2505
+ return $_plaintext;
2506
+ ';
2507
+ break;
2508
+ // case CRYPT_MODE_CBC:
2509
+ default:
2510
+ $encrypt = $init_encrypt . '
2511
+ $_ciphertext = "";
2512
+ $_plaintext_len = strlen($_text);
2513
+
2514
+ $in = $self->encryptIV;
2515
+
2516
+ for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
2517
+ $in = substr($_text, $_i, '.$block_size.') ^ $in;
2518
+ '.$encrypt_block.'
2519
+ $_ciphertext.= $in;
2520
+ }
2521
+
2522
+ if ($self->continuousBuffer) {
2523
+ $self->encryptIV = $in;
2524
+ }
2525
+
2526
+ return $_ciphertext;
2527
+ ';
2528
+
2529
+ $decrypt = $init_decrypt . '
2530
+ $_plaintext = "";
2531
+ $_text = str_pad($_text, strlen($_text) + ('.$block_size.' - strlen($_text) % '.$block_size.') % '.$block_size.', chr(0));
2532
+ $_ciphertext_len = strlen($_text);
2533
+
2534
+ $_iv = $self->decryptIV;
2535
+
2536
+ for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
2537
+ $in = $_block = substr($_text, $_i, '.$block_size.');
2538
+ '.$decrypt_block.'
2539
+ $_plaintext.= $in ^ $_iv;
2540
+ $_iv = $_block;
2541
+ }
2542
+
2543
+ if ($self->continuousBuffer) {
2544
+ $self->decryptIV = $_iv;
2545
+ }
2546
+
2547
+ return $self->_unpad($_plaintext);
2548
+ ';
2549
+ break;
2550
+ }
2551
+
2552
+ // Create the $inline function and return its name as string. Ready to run!
2553
+ if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
2554
+ eval('$func = function ($_action, &$self, $_text) { ' . $init_crypt . 'if ($_action == "encrypt") { ' . $encrypt . ' } else { ' . $decrypt . ' } };');
2555
+ return $func;
2556
+ }
2557
+
2558
+ return create_function('$_action, &$self, $_text', $init_crypt . 'if ($_action == "encrypt") { ' . $encrypt . ' } else { ' . $decrypt . ' }');
2559
+ }
2560
+
2561
+ /**
2562
+ * Holds the lambda_functions table (classwide)
2563
+ *
2564
+ * Each name of the lambda function, created from
2565
+ * _setupInlineCrypt() && _createInlineCryptFunction()
2566
+ * is stored, classwide (!), here for reusing.
2567
+ *
2568
+ * The string-based index of $function is a classwide
2569
+ * unique value representing, at least, the $mode of
2570
+ * operation (or more... depends of the optimizing level)
2571
+ * for which $mode the lambda function was created.
2572
+ *
2573
+ * @access private
2574
+ * @return array &$functions
2575
+ */
2576
+ function &_getLambdaFunctions()
2577
+ {
2578
+ static $functions = array();
2579
+ return $functions;
2580
+ }
2581
+
2582
+ /**
2583
+ * Generates a digest from $bytes
2584
+ *
2585
+ * @see self::_setupInlineCrypt()
2586
+ * @access private
2587
+ * @param $bytes
2588
+ * @return string
2589
+ */
2590
+ function _hashInlineCryptFunction($bytes)
2591
+ {
2592
+ if (!defined('CRYPT_BASE_WHIRLPOOL_AVAILABLE')) {
2593
+ define('CRYPT_BASE_WHIRLPOOL_AVAILABLE', (bool)(extension_loaded('hash') && in_array('whirlpool', hash_algos())));
2594
+ }
2595
+
2596
+ $result = '';
2597
+ $hash = $bytes;
2598
+
2599
+ switch (true) {
2600
+ case CRYPT_BASE_WHIRLPOOL_AVAILABLE:
2601
+ foreach (str_split($bytes, 64) as $t) {
2602
+ $hash = hash('whirlpool', $hash, true);
2603
+ $result .= $t ^ $hash;
2604
+ }
2605
+ return $result . hash('whirlpool', $hash, true);
2606
+ default:
2607
+ $len = strlen($bytes);
2608
+ for ($i = 0; $i < $len; $i+=20) {
2609
+ $t = substr($bytes, $i, 20);
2610
+ $hash = pack('H*', sha1($hash));
2611
+ $result .= $t ^ $hash;
2612
+ }
2613
+ return $result . pack('H*', sha1($hash));
2614
+ }
2615
+ }
2616
+
2617
+ /**
2618
+ * Convert float to int
2619
+ *
2620
+ * On 32-bit Linux installs running PHP < 5.3 converting floats to ints doesn't always work
2621
+ *
2622
+ * @access private
2623
+ * @param string $x
2624
+ * @return int
2625
+ */
2626
+ function safe_intval($x)
2627
+ {
2628
+ switch (true) {
2629
+ case is_int($x):
2630
+ // PHP 5.3, per http://php.net/releases/5_3_0.php, introduced "more consistent float rounding"
2631
+ case version_compare(PHP_VERSION, '5.3.0') >= 0 && (php_uname('m') & "\xDF\xDF\xDF") != 'ARM':
2632
+ // PHP_OS & "\xDF\xDF\xDF" == strtoupper(substr(PHP_OS, 0, 3)), but a lot faster
2633
+ case (PHP_OS & "\xDF\xDF\xDF") === 'WIN':
2634
+ return $x;
2635
+ }
2636
+ return (fmod($x, 0x80000000) & 0x7FFFFFFF) |
2637
+ ((fmod(floor($x / 0x80000000), 2) & 1) << 31);
2638
+ }
2639
+
2640
+ /**
2641
+ * eval()'able string for in-line float to int
2642
+ *
2643
+ * @access private
2644
+ * @return string
2645
+ */
2646
+ function safe_intval_inline()
2647
+ {
2648
+ // on 32-bit linux systems with PHP < 5.3 float to integer conversion is bad
2649
+ switch (true) {
2650
+ case defined('PHP_INT_SIZE') && PHP_INT_SIZE == 8:
2651
+ case version_compare(PHP_VERSION, '5.3.0') >= 0 && (php_uname('m') & "\xDF\xDF\xDF") != 'ARM':
2652
+ case (PHP_OS & "\xDF\xDF\xDF") === 'WIN':
2653
+ return '%s';
2654
+ break;
2655
+ default:
2656
+ $safeint = '(is_int($temp = %s) ? $temp : (fmod($temp, 0x80000000) & 0x7FFFFFFF) | ';
2657
+ return $safeint . '((fmod(floor($temp / 0x80000000), 2) & 1) << 31))';
2658
+ }
2659
+ }
2660
+ }
installer/dup-installer/classes/Crypt/Random.php CHANGED
@@ -1,340 +1,340 @@
1
- <?php
2
- defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
- /**
4
- * Random Number Generator
5
- *
6
- * The idea behind this function is that it can be easily replaced with your own crypt_random_string()
7
- * function. eg. maybe you have a better source of entropy for creating the initial states or whatever.
8
- *
9
- * PHP versions 4 and 5
10
- *
11
- * Here's a short example of how to use this library:
12
- * <code>
13
- * <?php
14
- * include 'Crypt/Random.php';
15
- *
16
- * echo bin2hex(crypt_random_string(8));
17
- * ?>
18
- * </code>
19
- *
20
- * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
21
- * of this software and associated documentation files (the "Software"), to deal
22
- * in the Software without restriction, including without limitation the rights
23
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
24
- * copies of the Software, and to permit persons to whom the Software is
25
- * furnished to do so, subject to the following conditions:
26
- *
27
- * The above copyright notice and this permission notice shall be included in
28
- * all copies or substantial portions of the Software.
29
- *
30
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
31
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
32
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
33
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
34
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
35
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
36
- * THE SOFTWARE.
37
- *
38
- * @category Crypt
39
- * @package Crypt_Random
40
- * @author Jim Wigginton <terrafrost@php.net>
41
- * @copyright 2007 Jim Wigginton
42
- * @license http://www.opensource.org/licenses/mit-license.html MIT License
43
- * @link http://phpseclib.sourceforge.net
44
- */
45
-
46
- // laravel is a PHP framework that utilizes phpseclib. laravel workbenches may, independently,
47
- // have phpseclib as a requirement as well. if you're developing such a program you may encounter
48
- // a "Cannot redeclare crypt_random_string()" error.
49
- if (!function_exists('crypt_random_string')) {
50
- /**
51
- * "Is Windows" test
52
- *
53
- * @access private
54
- */
55
- define('CRYPT_RANDOM_IS_WINDOWS', strtoupper(substr(PHP_OS, 0, 3)) === 'WIN');
56
-
57
- /**
58
- * Generate a random string.
59
- *
60
- * Although microoptimizations are generally discouraged as they impair readability this function is ripe with
61
- * microoptimizations because this function has the potential of being called a huge number of times.
62
- * eg. for RSA key generation.
63
- *
64
- * @param int $length
65
- * @return string
66
- * @access public
67
- */
68
- function crypt_random_string($length)
69
- {
70
- if (!$length) {
71
- return '';
72
- }
73
-
74
- if (CRYPT_RANDOM_IS_WINDOWS) {
75
- // method 1. prior to PHP 5.3, mcrypt_create_iv() would call rand() on windows
76
- if (extension_loaded('mcrypt') && version_compare(PHP_VERSION, '5.3.0', '>=')) {
77
- return @mcrypt_create_iv($length);
78
- }
79
- // method 2. openssl_random_pseudo_bytes was introduced in PHP 5.3.0 but prior to PHP 5.3.4 there was,
80
- // to quote <http://php.net/ChangeLog-5.php#5.3.4>, "possible blocking behavior". as of 5.3.4
81
- // openssl_random_pseudo_bytes and mcrypt_create_iv do the exact same thing on Windows. ie. they both
82
- // call php_win32_get_random_bytes():
83
- //
84
- // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/openssl/openssl.c#L5008
85
- // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1392
86
- //
87
- // php_win32_get_random_bytes() is defined thusly:
88
- //
89
- // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/win32/winutil.c#L80
90
- //
91
- // we're calling it, all the same, in the off chance that the mcrypt extension is not available
92
- if (extension_loaded('openssl') && version_compare(PHP_VERSION, '5.3.4', '>=')) {
93
- return openssl_random_pseudo_bytes($length);
94
- }
95
- } else {
96
- // method 1. the fastest
97
- if (extension_loaded('openssl') && version_compare(PHP_VERSION, '5.3.0', '>=')) {
98
- return openssl_random_pseudo_bytes($length);
99
- }
100
- // method 2
101
- static $fp = true;
102
- if ($fp === true) {
103
- // warning's will be output unles the error suppression operator is used. errors such as
104
- // "open_basedir restriction in effect", "Permission denied", "No such file or directory", etc.
105
- $fp = @fopen('/dev/urandom', 'rb');
106
- }
107
- if ($fp !== true && $fp !== false) { // surprisingly faster than !is_bool() or is_resource()
108
- return fread($fp, $length);
109
- }
110
- // method 3. pretty much does the same thing as method 2 per the following url:
111
- // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1391
112
- // surprisingly slower than method 2. maybe that's because mcrypt_create_iv does a bunch of error checking that we're
113
- // not doing. regardless, this'll only be called if this PHP script couldn't open /dev/urandom due to open_basedir
114
- // restrictions or some such
115
- if (extension_loaded('mcrypt')) {
116
- return @mcrypt_create_iv($length, MCRYPT_DEV_URANDOM);
117
- }
118
- }
119
- // at this point we have no choice but to use a pure-PHP CSPRNG
120
-
121
- // cascade entropy across multiple PHP instances by fixing the session and collecting all
122
- // environmental variables, including the previous session data and the current session
123
- // data.
124
- //
125
- // mt_rand seeds itself by looking at the PID and the time, both of which are (relatively)
126
- // easy to guess at. linux uses mouse clicks, keyboard timings, etc, as entropy sources, but
127
- // PHP isn't low level to be able to use those as sources and on a web server there's not likely
128
- // going to be a ton of keyboard or mouse action. web servers do have one thing that we can use
129
- // however, a ton of people visiting the website. obviously you don't want to base your seeding
130
- // soley on parameters a potential attacker sends but (1) not everything in $_SERVER is controlled
131
- // by the user and (2) this isn't just looking at the data sent by the current user - it's based
132
- // on the data sent by all users. one user requests the page and a hash of their info is saved.
133
- // another user visits the page and the serialization of their data is utilized along with the
134
- // server envirnment stuff and a hash of the previous http request data (which itself utilizes
135
- // a hash of the session data before that). certainly an attacker should be assumed to have
136
- // full control over his own http requests. he, however, is not going to have control over
137
- // everyone's http requests.
138
- static $crypto = false, $v;
139
- if ($crypto === false) {
140
- // save old session data
141
- $old_session_id = session_id();
142
- $old_use_cookies = ini_get('session.use_cookies');
143
- $old_session_cache_limiter = session_cache_limiter();
144
- $_OLD_SESSION = isset($_SESSION) ? $_SESSION : false;
145
- if ($old_session_id != '') {
146
- session_write_close();
147
- }
148
-
149
- session_id(1);
150
- if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('session.use_cookies'))
151
- ini_set('session.use_cookies', 0);
152
- session_cache_limiter('');
153
- session_start();
154
-
155
- $v = $seed = $_SESSION['seed'] = pack('H*', sha1(
156
- (isset($_SERVER) ? phpseclib_safe_serialize($_SERVER) : '') .
157
- (isset($_POST) ? phpseclib_safe_serialize($_POST) : '') .
158
- (isset($_GET) ? phpseclib_safe_serialize($_GET) : '') .
159
- (isset($_COOKIE) ? phpseclib_safe_serialize($_COOKIE) : '') .
160
- phpseclib_safe_serialize($GLOBALS) .
161
- phpseclib_safe_serialize($_SESSION) .
162
- phpseclib_safe_serialize($_OLD_SESSION)
163
- ));
164
- if (!isset($_SESSION['count'])) {
165
- $_SESSION['count'] = 0;
166
- }
167
- $_SESSION['count']++;
168
-
169
- session_write_close();
170
-
171
- // restore old session data
172
- if ($old_session_id != '') {
173
- session_id($old_session_id);
174
- session_start();
175
- if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('session.use_cookies'))
176
- ini_set('session.use_cookies', $old_use_cookies);
177
- session_cache_limiter($old_session_cache_limiter);
178
- } else {
179
- if ($_OLD_SESSION !== false) {
180
- $_SESSION = $_OLD_SESSION;
181
- unset($_OLD_SESSION);
182
- } else {
183
- unset($_SESSION);
184
- }
185
- }
186
-
187
- // in SSH2 a shared secret and an exchange hash are generated through the key exchange process.
188
- // the IV client to server is the hash of that "nonce" with the letter A and for the encryption key it's the letter C.
189
- // if the hash doesn't produce enough a key or an IV that's long enough concat successive hashes of the
190
- // original hash and the current hash. we'll be emulating that. for more info see the following URL:
191
- //
192
- // http://tools.ietf.org/html/rfc4253#section-7.2
193
- //
194
- // see the is_string($crypto) part for an example of how to expand the keys
195
- $key = pack('H*', sha1($seed . 'A'));
196
- $iv = pack('H*', sha1($seed . 'C'));
197
-
198
- // ciphers are used as per the nist.gov link below. also, see this link:
199
- //
200
- // http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator#Designs_based_on_cryptographic_primitives
201
- switch (true) {
202
- case phpseclib_resolve_include_path('Crypt/AES.php'):
203
- if (!class_exists('Crypt_AES')) {
204
- include_once 'AES.php';
205
- }
206
- $crypto = new Crypt_AES(CRYPT_AES_MODE_CTR);
207
- break;
208
- case phpseclib_resolve_include_path('Crypt/Twofish.php'):
209
- if (!class_exists('Crypt_Twofish')) {
210
- include_once 'Twofish.php';
211
- }
212
- $crypto = new Crypt_Twofish(CRYPT_TWOFISH_MODE_CTR);
213
- break;
214
- case phpseclib_resolve_include_path('Crypt/Blowfish.php'):
215
- if (!class_exists('Crypt_Blowfish')) {
216
- include_once 'Blowfish.php';
217
- }
218
- $crypto = new Crypt_Blowfish(CRYPT_BLOWFISH_MODE_CTR);
219
- break;
220
- case phpseclib_resolve_include_path('Crypt/TripleDES.php'):
221
- if (!class_exists('Crypt_TripleDES')) {
222
- include_once 'TripleDES.php';
223
- }
224
- $crypto = new Crypt_TripleDES(CRYPT_DES_MODE_CTR);
225
- break;
226
- case phpseclib_resolve_include_path('Crypt/DES.php'):
227
- if (!class_exists('Crypt_DES')) {
228
- include_once 'DES.php';
229
- }
230
- $crypto = new Crypt_DES(CRYPT_DES_MODE_CTR);
231
- break;
232
- case phpseclib_resolve_include_path('Crypt/RC4.php'):
233
- if (!class_exists('Crypt_RC4')) {
234
- include_once 'RC4.php';
235
- }
236
- $crypto = new Crypt_RC4();
237
- break;
238
- default:
239
- user_error('crypt_random_string requires at least one symmetric cipher be loaded');
240
- return false;
241
- }
242
-
243
- $crypto->setKey($key);
244
- $crypto->setIV($iv);
245
- $crypto->enableContinuousBuffer();
246
- }
247
-
248
- //return $crypto->encrypt(str_repeat("\0", $length));
249
-
250
- // the following is based off of ANSI X9.31:
251
- //
252
- // http://csrc.nist.gov/groups/STM/cavp/documents/rng/931rngext.pdf
253
- //
254
- // OpenSSL uses that same standard for it's random numbers:
255
- //
256
- // http://www.opensource.apple.com/source/OpenSSL/OpenSSL-38/openssl/fips-1.0/rand/fips_rand.c
257
- // (do a search for "ANS X9.31 A.2.4")
258
- $result = '';
259
- while (strlen($result) < $length) {
260
- $i = $crypto->encrypt(microtime()); // strlen(microtime()) == 21
261
- $r = $crypto->encrypt($i ^ $v); // strlen($v) == 20
262
- $v = $crypto->encrypt($r ^ $i); // strlen($r) == 20
263
- $result.= $r;
264
- }
265
- return substr($result, 0, $length);
266
- }
267
- }
268
-
269
- if (!function_exists('phpseclib_safe_serialize')) {
270
- /**
271
- * Safely serialize variables
272
- *
273
- * If a class has a private __sleep() method it'll give a fatal error on PHP 5.2 and earlier.
274
- * PHP 5.3 will emit a warning.
275
- *
276
- * @param mixed $arr
277
- * @access public
278
- */
279
- function phpseclib_safe_serialize(&$arr)
280
- {
281
- if (is_object($arr)) {
282
- return '';
283
- }
284
- if (!is_array($arr)) {
285
- return serialize($arr);
286
- }
287
- // prevent circular array recursion
288
- if (isset($arr['__phpseclib_marker'])) {
289
- return '';
290
- }
291
- $safearr = array();
292
- $arr['__phpseclib_marker'] = true;
293
- foreach (array_keys($arr) as $key) {
294
- // do not recurse on the '__phpseclib_marker' key itself, for smaller memory usage
295
- if ($key !== '__phpseclib_marker') {
296
- $safearr[$key] = phpseclib_safe_serialize($arr[$key]);
297
- }
298
- }
299
- unset($arr['__phpseclib_marker']);
300
- return serialize($safearr);
301
- }
302
- }
303
-
304
- if (!function_exists('phpseclib_resolve_include_path')) {
305
- /**
306
- * Resolve filename against the include path.
307
- *
308
- * Wrapper around stream_resolve_include_path() (which was introduced in
309
- * PHP 5.3.2) with fallback implementation for earlier PHP versions.
310
- *
311
- * @param string $filename
312
- * @return string|false
313
- * @access public
314
- */
315
- function phpseclib_resolve_include_path($filename)
316
- {
317
- if (function_exists('stream_resolve_include_path')) {
318
- return stream_resolve_include_path($filename);
319
- }
320
-
321
- // handle non-relative paths
322
- if (file_exists($filename)) {
323
- return realpath($filename);
324
- }
325
-
326
- $paths = PATH_SEPARATOR == ':' ?
327
- preg_split('#(?<!phar):#', get_include_path()) :
328
- explode(PATH_SEPARATOR, get_include_path());
329
- foreach ($paths as $prefix) {
330
- // path's specified in include_path don't always end in /
331
- $ds = substr($prefix, -1) == DIRECTORY_SEPARATOR ? '' : DIRECTORY_SEPARATOR;
332
- $file = $prefix . $ds . $filename;
333
- if (file_exists($file)) {
334
- return realpath($file);
335
- }
336
- }
337
-
338
- return false;
339
- }
340
- }
1
+ <?php
2
+ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
+ /**
4
+ * Random Number Generator
5
+ *
6
+ * The idea behind this function is that it can be easily replaced with your own crypt_random_string()
7
+ * function. eg. maybe you have a better source of entropy for creating the initial states or whatever.
8
+ *
9
+ * PHP versions 4 and 5
10
+ *
11
+ * Here's a short example of how to use this library:
12
+ * <code>
13
+ * <?php
14
+ * include 'Crypt/Random.php';
15
+ *
16
+ * echo bin2hex(crypt_random_string(8));
17
+ * ?>
18
+ * </code>
19
+ *
20
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
21
+ * of this software and associated documentation files (the "Software"), to deal
22
+ * in the Software without restriction, including without limitation the rights
23
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
24
+ * copies of the Software, and to permit persons to whom the Software is
25
+ * furnished to do so, subject to the following conditions:
26
+ *
27
+ * The above copyright notice and this permission notice shall be included in
28
+ * all copies or substantial portions of the Software.
29
+ *
30
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
31
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
32
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
33
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
34
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
35
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
36
+ * THE SOFTWARE.
37
+ *
38
+ * @category Crypt
39
+ * @package Crypt_Random
40
+ * @author Jim Wigginton <terrafrost@php.net>
41
+ * @copyright 2007 Jim Wigginton
42
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
43
+ * @link http://phpseclib.sourceforge.net
44
+ */
45
+
46
+ // laravel is a PHP framework that utilizes phpseclib. laravel workbenches may, independently,
47
+ // have phpseclib as a requirement as well. if you're developing such a program you may encounter
48
+ // a "Cannot redeclare crypt_random_string()" error.
49
+ if (!function_exists('crypt_random_string')) {
50
+ /**
51
+ * "Is Windows" test
52
+ *
53
+ * @access private
54
+ */
55
+ define('CRYPT_RANDOM_IS_WINDOWS', strtoupper(substr(PHP_OS, 0, 3)) === 'WIN');
56
+
57
+ /**
58
+ * Generate a random string.
59
+ *
60
+ * Although microoptimizations are generally discouraged as they impair readability this function is ripe with
61
+ * microoptimizations because this function has the potential of being called a huge number of times.
62
+ * eg. for RSA key generation.
63
+ *
64
+ * @param int $length
65
+ * @return string
66
+ * @access public
67
+ */
68
+ function crypt_random_string($length)
69
+ {
70
+ if (!$length) {
71
+ return '';
72
+ }
73
+
74
+ if (CRYPT_RANDOM_IS_WINDOWS) {
75
+ // method 1. prior to PHP 5.3, mcrypt_create_iv() would call rand() on windows
76
+ if (extension_loaded('mcrypt') && version_compare(PHP_VERSION, '5.3.0', '>=')) {
77
+ return @mcrypt_create_iv($length);
78
+ }
79
+ // method 2. openssl_random_pseudo_bytes was introduced in PHP 5.3.0 but prior to PHP 5.3.4 there was,
80
+ // to quote <http://php.net/ChangeLog-5.php#5.3.4>, "possible blocking behavior". as of 5.3.4
81
+ // openssl_random_pseudo_bytes and mcrypt_create_iv do the exact same thing on Windows. ie. they both
82
+ // call php_win32_get_random_bytes():
83
+ //
84
+ // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/openssl/openssl.c#L5008
85
+ // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1392
86
+ //
87
+ // php_win32_get_random_bytes() is defined thusly:
88
+ //
89
+ // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/win32/winutil.c#L80
90
+ //
91
+ // we're calling it, all the same, in the off chance that the mcrypt extension is not available
92
+ if (extension_loaded('openssl') && version_compare(PHP_VERSION, '5.3.4', '>=')) {
93
+ return openssl_random_pseudo_bytes($length);
94
+ }
95
+ } else {
96
+ // method 1. the fastest
97
+ if (extension_loaded('openssl') && version_compare(PHP_VERSION, '5.3.0', '>=')) {
98
+ return openssl_random_pseudo_bytes($length);
99
+ }
100
+ // method 2
101
+ static $fp = true;
102
+ if ($fp === true) {
103
+ // warning's will be output unles the error suppression operator is used. errors such as
104
+ // "open_basedir restriction in effect", "Permission denied", "No such file or directory", etc.
105
+ $fp = @fopen('/dev/urandom', 'rb');
106
+ }
107
+ if ($fp !== true && $fp !== false) { // surprisingly faster than !is_bool() or is_resource()
108
+ return fread($fp, $length);
109
+ }
110
+ // method 3. pretty much does the same thing as method 2 per the following url:
111
+ // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1391
112
+ // surprisingly slower than method 2. maybe that's because mcrypt_create_iv does a bunch of error checking that we're
113
+ // not doing. regardless, this'll only be called if this PHP script couldn't open /dev/urandom due to open_basedir
114
+ // restrictions or some such
115
+ if (extension_loaded('mcrypt')) {
116
+ return @mcrypt_create_iv($length, MCRYPT_DEV_URANDOM);
117
+ }
118
+ }
119
+ // at this point we have no choice but to use a pure-PHP CSPRNG
120
+
121
+ // cascade entropy across multiple PHP instances by fixing the session and collecting all
122
+ // environmental variables, including the previous session data and the current session
123
+ // data.
124
+ //
125
+ // mt_rand seeds itself by looking at the PID and the time, both of which are (relatively)
126
+ // easy to guess at. linux uses mouse clicks, keyboard timings, etc, as entropy sources, but
127
+ // PHP isn't low level to be able to use those as sources and on a web server there's not likely
128
+ // going to be a ton of keyboard or mouse action. web servers do have one thing that we can use
129
+ // however, a ton of people visiting the website. obviously you don't want to base your seeding
130
+ // soley on parameters a potential attacker sends but (1) not everything in $_SERVER is controlled
131
+ // by the user and (2) this isn't just looking at the data sent by the current user - it's based
132
+ // on the data sent by all users. one user requests the page and a hash of their info is saved.
133
+ // another user visits the page and the serialization of their data is utilized along with the
134
+ // server envirnment stuff and a hash of the previous http request data (which itself utilizes
135
+ // a hash of the session data before that). certainly an attacker should be assumed to have
136
+ // full control over his own http requests. he, however, is not going to have control over
137
+ // everyone's http requests.
138
+ static $crypto = false, $v;
139
+ if ($crypto === false) {
140
+ // save old session data
141
+ $old_session_id = session_id();
142
+ $old_use_cookies = ini_get('session.use_cookies');
143
+ $old_session_cache_limiter = session_cache_limiter();
144
+ $_OLD_SESSION = isset($_SESSION) ? $_SESSION : false;
145
+ if ($old_session_id != '') {
146
+ session_write_close();
147
+ }
148
+
149
+ session_id(1);
150
+ if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('session.use_cookies'))
151
+ ini_set('session.use_cookies', 0);
152
+ session_cache_limiter('');
153
+ session_start();
154
+
155
+ $v = $seed = $_SESSION['seed'] = pack('H*', sha1(
156
+ (isset($_SERVER) ? phpseclib_safe_serialize($_SERVER) : '') .
157
+ (isset($_POST) ? phpseclib_safe_serialize($_POST) : '') .
158
+ (isset($_GET) ? phpseclib_safe_serialize($_GET) : '') .
159
+ (isset($_COOKIE) ? phpseclib_safe_serialize($_COOKIE) : '') .
160
+ phpseclib_safe_serialize($GLOBALS) .
161
+ phpseclib_safe_serialize($_SESSION) .
162
+ phpseclib_safe_serialize($_OLD_SESSION)
163
+ ));
164
+ if (!isset($_SESSION['count'])) {
165
+ $_SESSION['count'] = 0;
166
+ }
167
+ $_SESSION['count']++;
168
+
169
+ session_write_close();
170
+
171
+ // restore old session data
172
+ if ($old_session_id != '') {
173
+ session_id($old_session_id);
174
+ session_start();
175
+ if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('session.use_cookies'))
176
+ ini_set('session.use_cookies', $old_use_cookies);
177
+ session_cache_limiter($old_session_cache_limiter);
178
+ } else {
179
+ if ($_OLD_SESSION !== false) {
180
+ $_SESSION = $_OLD_SESSION;
181
+ unset($_OLD_SESSION);
182
+ } else {
183
+ unset($_SESSION);
184
+ }
185
+ }
186
+
187
+ // in SSH2 a shared secret and an exchange hash are generated through the key exchange process.
188
+ // the IV client to server is the hash of that "nonce" with the letter A and for the encryption key it's the letter C.
189
+ // if the hash doesn't produce enough a key or an IV that's long enough concat successive hashes of the
190
+ // original hash and the current hash. we'll be emulating that. for more info see the following URL:
191
+ //
192
+ // http://tools.ietf.org/html/rfc4253#section-7.2
193
+ //
194
+ // see the is_string($crypto) part for an example of how to expand the keys
195
+ $key = pack('H*', sha1($seed . 'A'));
196
+ $iv = pack('H*', sha1($seed . 'C'));
197
+
198
+ // ciphers are used as per the nist.gov link below. also, see this link:
199
+ //
200
+ // http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator#Designs_based_on_cryptographic_primitives
201
+ switch (true) {
202
+ case phpseclib_resolve_include_path('Crypt/AES.php'):
203
+ if (!class_exists('Crypt_AES')) {
204
+ include_once 'AES.php';
205
+ }
206
+ $crypto = new Crypt_AES(CRYPT_AES_MODE_CTR);
207
+ break;
208
+ case phpseclib_resolve_include_path('Crypt/Twofish.php'):
209
+ if (!class_exists('Crypt_Twofish')) {
210
+ include_once 'Twofish.php';
211
+ }
212
+ $crypto = new Crypt_Twofish(CRYPT_TWOFISH_MODE_CTR);
213
+ break;
214
+ case phpseclib_resolve_include_path('Crypt/Blowfish.php'):
215
+ if (!class_exists('Crypt_Blowfish')) {
216
+ include_once 'Blowfish.php';
217
+ }
218
+ $crypto = new Crypt_Blowfish(CRYPT_BLOWFISH_MODE_CTR);
219
+ break;
220
+ case phpseclib_resolve_include_path('Crypt/TripleDES.php'):
221
+ if (!class_exists('Crypt_TripleDES')) {
222
+ include_once 'TripleDES.php';
223
+ }
224
+ $crypto = new Crypt_TripleDES(CRYPT_DES_MODE_CTR);
225
+ break;
226
+ case phpseclib_resolve_include_path('Crypt/DES.php'):
227
+ if (!class_exists('Crypt_DES')) {
228
+ include_once 'DES.php';
229
+ }
230
+ $crypto = new Crypt_DES(CRYPT_DES_MODE_CTR);
231
+ break;
232
+ case phpseclib_resolve_include_path('Crypt/RC4.php'):
233
+ if (!class_exists('Crypt_RC4')) {
234
+ include_once 'RC4.php';
235
+ }
236
+ $crypto = new Crypt_RC4();
237
+ break;
238
+ default:
239
+ user_error('crypt_random_string requires at least one symmetric cipher be loaded');
240
+ return false;
241
+ }
242
+
243
+ $crypto->setKey($key);
244
+ $crypto->setIV($iv);
245
+ $crypto->enableContinuousBuffer();
246
+ }
247
+
248
+ //return $crypto->encrypt(str_repeat("\0", $length));
249
+
250
+ // the following is based off of ANSI X9.31:
251
+ //
252
+ // http://csrc.nist.gov/groups/STM/cavp/documents/rng/931rngext.pdf
253
+ //
254
+ // OpenSSL uses that same standard for it's random numbers:
255
+ //
256
+ // http://www.opensource.apple.com/source/OpenSSL/OpenSSL-38/openssl/fips-1.0/rand/fips_rand.c
257
+ // (do a search for "ANS X9.31 A.2.4")
258
+ $result = '';
259
+ while (strlen($result) < $length) {
260
+ $i = $crypto->encrypt(microtime()); // strlen(microtime()) == 21
261
+ $r = $crypto->encrypt($i ^ $v); // strlen($v) == 20
262
+ $v = $crypto->encrypt($r ^ $i); // strlen($r) == 20
263
+ $result.= $r;
264
+ }
265
+ return substr($result, 0, $length);
266
+ }
267
+ }
268
+
269
+ if (!function_exists('phpseclib_safe_serialize')) {
270
+ /**
271
+ * Safely serialize variables
272
+ *
273
+ * If a class has a private __sleep() method it'll give a fatal error on PHP 5.2 and earlier.
274
+ * PHP 5.3 will emit a warning.
275
+ *
276
+ * @param mixed $arr
277
+ * @access public
278
+ */
279
+ function phpseclib_safe_serialize(&$arr)
280
+ {
281
+ if (is_object($arr)) {
282
+ return '';
283
+ }
284
+ if (!is_array($arr)) {
285
+ return serialize($arr);
286
+ }
287
+ // prevent circular array recursion
288
+ if (isset($arr['__phpseclib_marker'])) {
289
+ return '';
290
+ }
291
+ $safearr = array();
292
+ $arr['__phpseclib_marker'] = true;
293
+ foreach (array_keys($arr) as $key) {
294
+ // do not recurse on the '__phpseclib_marker' key itself, for smaller memory usage
295
+ if ($key !== '__phpseclib_marker') {
296
+ $safearr[$key] = phpseclib_safe_serialize($arr[$key]);
297
+ }
298
+ }
299
+ unset($arr['__phpseclib_marker']);
300
+ return serialize($safearr);
301
+ }
302
+ }
303
+
304
+ if (!function_exists('phpseclib_resolve_include_path')) {
305
+ /**
306
+ * Resolve filename against the include path.
307
+ *
308
+ * Wrapper around stream_resolve_include_path() (which was introduced in
309
+ * PHP 5.3.2) with fallback implementation for earlier PHP versions.
310
+ *
311
+ * @param string $filename
312
+ * @return string|false
313
+ * @access public
314
+ */
315
+ function phpseclib_resolve_include_path($filename)
316
+ {
317
+ if (function_exists('stream_resolve_include_path')) {
318
+ return stream_resolve_include_path($filename);
319
+ }
320
+
321
+ // handle non-relative paths
322
+ if (file_exists($filename)) {
323
+ return realpath($filename);
324
+ }
325
+
326
+ $paths = PATH_SEPARATOR == ':' ?
327
+ preg_split('#(?<!phar):#', get_include_path()) :
328
+ explode(PATH_SEPARATOR, get_include_path());
329
+ foreach ($paths as $prefix) {
330
+ // path's specified in include_path don't always end in /
331
+ $ds = substr($prefix, -1) == DIRECTORY_SEPARATOR ? '' : DIRECTORY_SEPARATOR;
332
+ $file = $prefix . $ds . $filename;
333
+ if (file_exists($file)) {
334
+ return realpath($file);
335
+ }
336
+ }
337
+
338
+ return false;
339
+ }
340
+ }
installer/dup-installer/classes/Crypt/Rijndael.php CHANGED
@@ -1,1050 +1,1050 @@
1
- <?php
2
- defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
- /**
4
- * Pure-PHP implementation of Rijndael.
5
- *
6
- * Uses mcrypt, if available/possible, and an internal implementation, otherwise.
7
- *
8
- * PHP versions 4 and 5
9
- *
10
- * If {@link self::setBlockLength() setBlockLength()} isn't called, it'll be assumed to be 128 bits. If
11
- * {@link self::setKeyLength() setKeyLength()} isn't called, it'll be calculated from
12
- * {@link self::setKey() setKey()}. ie. if the key is 128-bits, the key length will be 128-bits. If it's
13
- * 136-bits it'll be null-padded to 192-bits and 192 bits will be the key length until
14
- * {@link self::setKey() setKey()} is called, again, at which point, it'll be recalculated.
15
- *
16
- * Not all Rijndael implementations may support 160-bits or 224-bits as the block length / key length. mcrypt, for example,
17
- * does not. AES, itself, only supports block lengths of 128 and key lengths of 128, 192, and 256.
18
- * {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=10 Rijndael-ammended.pdf#page=10} defines the
19
- * algorithm for block lengths of 192 and 256 but not for block lengths / key lengths of 160 and 224. Indeed, 160 and 224
20
- * are first defined as valid key / block lengths in
21
- * {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=44 Rijndael-ammended.pdf#page=44}:
22
- * Extensions: Other block and Cipher Key lengths.
23
- * Note: Use of 160/224-bit Keys must be explicitly set by setKeyLength(160) respectively setKeyLength(224).
24
- *
25
- * {@internal The variable names are the same as those in
26
- * {@link http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf#page=10 fips-197.pdf#page=10}.}}
27
- *
28
- * Here's a short example of how to use this library:
29
- * <code>
30
- * <?php
31
- * include 'Crypt/Rijndael.php';
32
- *
33
- * $rijndael = new Crypt_Rijndael();
34
- *
35
- * $rijndael->setKey('abcdefghijklmnop');
36
- *
37
- * $size = 10 * 1024;
38
- * $plaintext = '';
39
- * for ($i = 0; $i < $size; $i++) {
40
- * $plaintext.= 'a';
41
- * }
42
- *
43
- * echo $rijndael->decrypt($rijndael->encrypt($plaintext));
44
- * ?>
45
- * </code>
46
- *
47
- * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
48
- * of this software and associated documentation files (the "Software"), to deal
49
- * in the Software without restriction, including without limitation the rights
50
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
51
- * copies of the Software, and to permit persons to whom the Software is
52
- * furnished to do so, subject to the following conditions:
53
- *
54
- * The above copyright notice and this permission notice shall be included in
55
- * all copies or substantial portions of the Software.
56
- *
57
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
58
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
59
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
60
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
61
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
62
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
63
- * THE SOFTWARE.
64
- *
65
- * @category Crypt
66
- * @package Crypt_Rijndael
67
- * @author Jim Wigginton <terrafrost@php.net>
68
- * @copyright 2008 Jim Wigginton
69
- * @license http://www.opensource.org/licenses/mit-license.html MIT License
70
- * @link http://phpseclib.sourceforge.net
71
- */
72
-
73
- /**
74
- * Include Crypt_Base
75
- *
76
- * Base cipher class
77
- */
78
- if (!class_exists('Crypt_Base')) {
79
- include_once 'Base.php';
80
- }
81
-
82
- /**#@+
83
- * @access public
84
- * @see self::encrypt()
85
- * @see self::decrypt()
86
- */
87
- /**
88
- * Encrypt / decrypt using the Counter mode.
89
- *
90
- * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
91
- *
92
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
93
- */
94
- define('CRYPT_RIJNDAEL_MODE_CTR', CRYPT_MODE_CTR);
95
- /**
96
- * Encrypt / decrypt using the Electronic Code Book mode.
97
- *
98
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
99
- */
100
- define('CRYPT_RIJNDAEL_MODE_ECB', CRYPT_MODE_ECB);
101
- /**
102
- * Encrypt / decrypt using the Code Book Chaining mode.
103
- *
104
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
105
- */
106
- define('CRYPT_RIJNDAEL_MODE_CBC', CRYPT_MODE_CBC);
107
- /**
108
- * Encrypt / decrypt using the Cipher Feedback mode.
109
- *
110
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29
111
- */
112
- define('CRYPT_RIJNDAEL_MODE_CFB', CRYPT_MODE_CFB);
113
- /**
114
- * Encrypt / decrypt using the Cipher Feedback mode.
115
- *
116
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29
117
- */
118
- define('CRYPT_RIJNDAEL_MODE_OFB', CRYPT_MODE_OFB);
119
- /**#@-*/
120
-
121
- /**
122
- * Pure-PHP implementation of Rijndael.
123
- *
124
- * @package Crypt_Rijndael
125
- * @author Jim Wigginton <terrafrost@php.net>
126
- * @access public
127
- */
128
- class Crypt_Rijndael extends Crypt_Base
129
- {
130
- /**
131
- * The namespace used by the cipher for its constants.
132
- *
133
- * @see Crypt_Base::const_namespace
134
- * @var string
135
- * @access private
136
- */
137
- var $const_namespace = 'RIJNDAEL';
138
-
139
- /**
140
- * The mcrypt specific name of the cipher
141
- *
142
- * Mcrypt is useable for 128/192/256-bit $block_size/$key_length. For 160/224 not.
143
- * Crypt_Rijndael determines automatically whether mcrypt is useable
144
- * or not for the current $block_size/$key_length.
145
- * In case of, $cipher_name_mcrypt will be set dynamically at run time accordingly.
146
- *
147
- * @see Crypt_Base::cipher_name_mcrypt
148
- * @see Crypt_Base::engine
149
- * @see self::isValidEngine()
150
- * @var string
151
- * @access private
152
- */
153
- var $cipher_name_mcrypt = 'rijndael-128';
154
-
155
- /**
156
- * The default salt used by setPassword()
157
- *
158
- * @see Crypt_Base::password_default_salt
159
- * @see Crypt_Base::setPassword()
160
- * @var string
161
- * @access private
162
- */
163
- var $password_default_salt = 'phpseclib';
164
-
165
- /**
166
- * The Key Schedule
167
- *
168
- * @see self::_setup()
169
- * @var array
170
- * @access private
171
- */
172
- var $w;
173
-
174
- /**
175
- * The Inverse Key Schedule
176
- *
177
- * @see self::_setup()
178
- * @var array
179
- * @access private
180
- */
181
- var $dw;
182
-
183
- /**
184
- * The Block Length divided by 32
185
- *
186
- * @see self::setBlockLength()
187
- * @var int
188
- * @access private
189
- * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4. Exists in conjunction with $block_size
190
- * because the encryption / decryption / key schedule creation requires this number and not $block_size. We could
191
- * derive this from $block_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
192
- * of that, we'll just precompute it once.
193
- */
194
- var $Nb = 4;
195
-
196
- /**
197
- * The Key Length (in bytes)
198
- *
199
- * @see self::setKeyLength()
200
- * @var int
201
- * @access private
202
- * @internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16. Exists in conjunction with $Nk
203
- * because the encryption / decryption / key schedule creation requires this number and not $key_length. We could
204
- * derive this from $key_length or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
205
- * of that, we'll just precompute it once.
206
- */
207
- var $key_length = 16;
208
-
209
- /**
210
- * The Key Length divided by 32
211
- *
212
- * @see self::setKeyLength()
213
- * @var int
214
- * @access private
215
- * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4
216
- */
217
- var $Nk = 4;
218
-
219
- /**
220
- * The Number of Rounds
221
- *
222
- * @var int
223
- * @access private
224
- * @internal The max value is 14, the min value is 10.
225
- */
226
- var $Nr;
227
-
228
- /**
229
- * Shift offsets
230
- *
231
- * @var array
232
- * @access private
233
- */
234
- var $c;
235
-
236
- /**
237
- * Holds the last used key- and block_size information
238
- *
239
- * @var array
240
- * @access private
241
- */
242
- var $kl;
243
-
244
- /**
245
- * Sets the key.
246
- *
247
- * Keys can be of any length. Rijndael, itself, requires the use of a key that's between 128-bits and 256-bits long and
248
- * whose length is a multiple of 32. If the key is less than 256-bits and the key length isn't set, we round the length
249
- * up to the closest valid key length, padding $key with null bytes. If the key is more than 256-bits, we trim the
250
- * excess bits.
251
- *
252
- * If the key is not explicitly set, it'll be assumed to be all null bytes.
253
- *
254
- * Note: 160/224-bit keys must explicitly set by setKeyLength(), otherwise they will be round/pad up to 192/256 bits.
255
- *
256
- * @see Crypt_Base:setKey()
257
- * @see self::setKeyLength()
258
- * @access public
259
- * @param string $key
260
- */
261
- function setKey($key)
262
- {
263
- if (!$this->explicit_key_length) {
264
- $length = strlen($key);
265
- switch (true) {
266
- case $length <= 16:
267
- $this->key_size = 16;
268
- break;
269
- case $length <= 20:
270
- $this->key_size = 20;
271
- break;
272
- case $length <= 24:
273
- $this->key_size = 24;
274
- break;
275
- case $length <= 28:
276
- $this->key_size = 28;
277
- break;
278
- default:
279
- $this->key_size = 32;
280
- }
281
- }
282
- parent::setKey($key);
283
- }
284
-
285
- /**
286
- * Sets the key length
287
- *
288
- * Valid key lengths are 128, 160, 192, 224, and 256. If the length is less than 128, it will be rounded up to
289
- * 128. If the length is greater than 128 and invalid, it will be rounded down to the closest valid amount.
290
- *
291
- * Note: phpseclib extends Rijndael (and AES) for using 160- and 224-bit keys but they are officially not defined
292
- * and the most (if not all) implementations are not able using 160/224-bit keys but round/pad them up to
293
- * 192/256 bits as, for example, mcrypt will do.
294
- *
295
- * That said, if you want be compatible with other Rijndael and AES implementations,
296
- * you should not setKeyLength(160) or setKeyLength(224).
297
- *
298
- * Additional: In case of 160- and 224-bit keys, phpseclib will/can, for that reason, not use
299
- * the mcrypt php extension, even if available.
300
- * This results then in slower encryption.
301
- *
302
- * @access public
303
- * @param int $length
304
- */
305
- function setKeyLength($length)
306
- {
307
- switch (true) {
308
- case $length <= 128:
309
- $this->key_length = 16;
310
- break;
311
- case $length <= 160:
312
- $this->key_length = 20;
313
- break;
314
- case $length <= 192:
315
- $this->key_length = 24;
316
- break;
317
- case $length <= 224:
318
- $this->key_length = 28;
319
- break;
320
- default:
321
- $this->key_length = 32;
322
- }
323
-
324
- parent::setKeyLength($length);
325
- }
326
-
327
- /**
328
- * Sets the block length
329
- *
330
- * Valid block lengths are 128, 160, 192, 224, and 256. If the length is less than 128, it will be rounded up to
331
- * 128. If the length is greater than 128 and invalid, it will be rounded down to the closest valid amount.
332
- *
333
- * @access public
334
- * @param int $length
335
- */
336
- function setBlockLength($length)
337
- {
338
- $length >>= 5;
339
- if ($length > 8) {
340
- $length = 8;
341
- } elseif ($length < 4) {
342
- $length = 4;
343
- }
344
- $this->Nb = $length;
345
- $this->block_size = $length << 2;
346
- $this->changed = true;
347
- $this->_setEngine();
348
- }
349
-
350
- /**
351
- * Test for engine validity
352
- *
353
- * This is mainly just a wrapper to set things up for Crypt_Base::isValidEngine()
354
- *
355
- * @see Crypt_Base::Crypt_Base()
356
- * @param int $engine
357
- * @access public
358
- * @return bool
359
- */
360
- function isValidEngine($engine)
361
- {
362
- switch ($engine) {
363
- case CRYPT_ENGINE_OPENSSL:
364
- if ($this->block_size != 16) {
365
- return false;
366
- }
367
- $this->cipher_name_openssl_ecb = 'aes-' . ($this->key_length << 3) . '-ecb';
368
- $this->cipher_name_openssl = 'aes-' . ($this->key_length << 3) . '-' . $this->_openssl_translate_mode();
369
- break;
370
- case CRYPT_ENGINE_MCRYPT:
371
- $this->cipher_name_mcrypt = 'rijndael-' . ($this->block_size << 3);
372
- if ($this->key_length % 8) { // is it a 160/224-bit key?
373
- // mcrypt is not usable for them, only for 128/192/256-bit keys
374
- return false;
375
- }
376
- }
377
-
378
- return parent::isValidEngine($engine);
379
- }
380
-
381
- /**
382
- * Encrypts a block
383
- *
384
- * @access private
385
- * @param string $in
386
- * @return string
387
- */
388
- function _encryptBlock($in)
389
- {
390
- static $tables;
391
- if (empty($tables)) {
392
- $tables = &$this->_getTables();
393
- }
394
- $t0 = $tables[0];
395
- $t1 = $tables[1];
396
- $t2 = $tables[2];
397
- $t3 = $tables[3];
398
- $sbox = $tables[4];
399
-
400
- $state = array();
401
- $words = unpack('N*', $in);
402
-
403
- $c = $this->c;
404
- $w = $this->w;
405
- $Nb = $this->Nb;
406
- $Nr = $this->Nr;
407
-
408
- // addRoundKey
409
- $wc = $Nb - 1;
410
- foreach ($words as $word) {
411
- $state[] = $word ^ $w[++$wc];
412
- }
413
-
414
- // fips-197.pdf#page=19, "Figure 5. Pseudo Code for the Cipher", states that this loop has four components -
415
- // subBytes, shiftRows, mixColumns, and addRoundKey. fips-197.pdf#page=30, "Implementation Suggestions Regarding
416
- // Various Platforms" suggests that performs enhanced implementations are described in Rijndael-ammended.pdf.
417
- // Rijndael-ammended.pdf#page=20, "Implementation aspects / 32-bit processor", discusses such an optimization.
418
- // Unfortunately, the description given there is not quite correct. Per aes.spec.v316.pdf#page=19 [1],
419
- // equation (7.4.7) is supposed to use addition instead of subtraction, so we'll do that here, as well.
420
-
421
- // [1] http://fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.v316.pdf
422
- $temp = array();
423
- for ($round = 1; $round < $Nr; ++$round) {
424
- $i = 0; // $c[0] == 0
425
- $j = $c[1];
426
- $k = $c[2];
427
- $l = $c[3];
428
-
429
- while ($i < $Nb) {
430
- $temp[$i] = $t0[$state[$i] >> 24 & 0x000000FF] ^
431
- $t1[$state[$j] >> 16 & 0x000000FF] ^
432
- $t2[$state[$k] >> 8 & 0x000000FF] ^
433
- $t3[$state[$l] & 0x000000FF] ^
434
- $w[++$wc];
435
- ++$i;
436
- $j = ($j + 1) % $Nb;
437
- $k = ($k + 1) % $Nb;
438
- $l = ($l + 1) % $Nb;
439
- }
440
- $state = $temp;
441
- }
442
-
443
- // subWord
444
- for ($i = 0; $i < $Nb; ++$i) {
445
- $state[$i] = $sbox[$state[$i] & 0x000000FF] |
446
- ($sbox[$state[$i] >> 8 & 0x000000FF] << 8) |
447
- ($sbox[$state[$i] >> 16 & 0x000000FF] << 16) |
448
- ($sbox[$state[$i] >> 24 & 0x000000FF] << 24);
449
- }
450
-
451
- // shiftRows + addRoundKey
452
- $i = 0; // $c[0] == 0
453
- $j = $c[1];
454
- $k = $c[2];
455
- $l = $c[3];
456
- while ($i < $Nb) {
457
- $temp[$i] = ($state[$i] & 0xFF000000) ^
458
- ($state[$j] & 0x00FF0000) ^
459
- ($state[$k] & 0x0000FF00) ^
460
- ($state[$l] & 0x000000FF) ^
461
- $w[$i];
462
- ++$i;
463
- $j = ($j + 1) % $Nb;
464
- $k = ($k + 1) % $Nb;
465
- $l = ($l + 1) % $Nb;
466
- }
467
-
468
- switch ($Nb) {
469
- case 8:
470
- return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]);
471
- case 7:
472
- return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]);
473
- case 6:
474
- return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]);
475
- case 5:
476
- return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]);
477
- default:
478
- return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3]);
479
- }
480
- }
481
-
482
- /**
483
- * Decrypts a block
484
- *
485
- * @access private
486
- * @param string $in
487
- * @return string
488
- */
489
- function _decryptBlock($in)
490
- {
491
- static $invtables;
492
- if (empty($invtables)) {
493
- $invtables = &$this->_getInvTables();
494
- }
495
- $dt0 = $invtables[0];
496
- $dt1 = $invtables[1];
497
- $dt2 = $invtables[2];
498
- $dt3 = $invtables[3];
499
- $isbox = $invtables[4];
500
-
501
- $state = array();
502
- $words = unpack('N*', $in);
503
-
504
- $c = $this->c;
505
- $dw = $this->dw;
506
- $Nb = $this->Nb;
507
- $Nr = $this->Nr;
508
-
509
- // addRoundKey
510
- $wc = $Nb - 1;
511
- foreach ($words as $word) {
512
- $state[] = $word ^ $dw[++$wc];
513
- }
514
-
515
- $temp = array();
516
- for ($round = $Nr - 1; $round > 0; --$round) {
517
- $i = 0; // $c[0] == 0
518
- $j = $Nb - $c[1];
519
- $k = $Nb - $c[2];
520
- $l = $Nb - $c[3];
521
-
522
- while ($i < $Nb) {
523
- $temp[$i] = $dt0[$state[$i] >> 24 & 0x000000FF] ^
524
- $dt1[$state[$j] >> 16 & 0x000000FF] ^
525
- $dt2[$state[$k] >> 8 & 0x000000FF] ^
526
- $dt3[$state[$l] & 0x000000FF] ^
527
- $dw[++$wc];
528
- ++$i;
529
- $j = ($j + 1) % $Nb;
530
- $k = ($k + 1) % $Nb;
531
- $l = ($l + 1) % $Nb;
532
- }
533
- $state = $temp;
534
- }
535
-
536
- // invShiftRows + invSubWord + addRoundKey
537
- $i = 0; // $c[0] == 0
538
- $j = $Nb - $c[1];
539
- $k = $Nb - $c[2];
540
- $l = $Nb - $c[3];
541
-
542
- while ($i < $Nb) {
543
- $word = ($state[$i] & 0xFF000000) |
544
- ($state[$j] & 0x00FF0000) |
545
- ($state[$k] & 0x0000FF00) |
546
- ($state[$l] & 0x000000FF);
547
-
548
- $temp[$i] = $dw[$i] ^ ($isbox[$word & 0x000000FF] |
549
- ($isbox[$word >> 8 & 0x000000FF] << 8) |
550
- ($isbox[$word >> 16 & 0x000000FF] << 16) |
551
- ($isbox[$word >> 24 & 0x000000FF] << 24));
552
- ++$i;
553
- $j = ($j + 1) % $Nb;
554
- $k = ($k + 1) % $Nb;
555
- $l = ($l + 1) % $Nb;
556
- }
557
-
558
- switch ($Nb) {
559
- case 8:
560
- return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]);
561
- case 7:
562
- return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]);
563
- case 6:
564
- return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]);
565
- case 5:
566
- return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]);
567
- default:
568
- return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3]);
569
- }
570
- }
571
-
572
- /**
573
- * Setup the key (expansion)
574
- *
575
- * @see Crypt_Base::_setupKey()
576
- * @access private
577
- */
578
- function _setupKey()
579
- {
580
- // Each number in $rcon is equal to the previous number multiplied by two in Rijndael's finite field.
581
- // See http://en.wikipedia.org/wiki/Finite_field_arithmetic#Multiplicative_inverse
582
- static $rcon = array(0,
583
- 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000,
584
- 0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000,
585
- 0x6C000000, 0xD8000000, 0xAB000000, 0x4D000000, 0x9A000000,
586
- 0x2F000000, 0x5E000000, 0xBC000000, 0x63000000, 0xC6000000,
587
- 0x97000000, 0x35000000, 0x6A000000, 0xD4000000, 0xB3000000,
588
- 0x7D000000, 0xFA000000, 0xEF000000, 0xC5000000, 0x91000000
589
- );
590
-
591
- if (isset($this->kl['key']) && $this->key === $this->kl['key'] && $this->key_length === $this->kl['key_length'] && $this->block_size === $this->kl['block_size']) {
592
- // already expanded
593
- return;
594
- }
595
- $this->kl = array('key' => $this->key, 'key_length' => $this->key_length, 'block_size' => $this->block_size);
596
-
597
- $this->Nk = $this->key_length >> 2;
598
- // see Rijndael-ammended.pdf#page=44
599
- $this->Nr = max($this->Nk, $this->Nb) + 6;
600
-
601
- // shift offsets for Nb = 5, 7 are defined in Rijndael-ammended.pdf#page=44,
602
- // "Table 8: Shift offsets in Shiftrow for the alternative block lengths"
603
- // shift offsets for Nb = 4, 6, 8 are defined in Rijndael-ammended.pdf#page=14,
604
- // "Table 2: Shift offsets for different block lengths"
605
- switch ($this->Nb) {
606
- case 4:
607
- case 5:
608
- case 6:
609
- $this->c = array(0, 1, 2, 3);
610
- break;
611
- case 7:
612
- $this->c = array(0, 1, 2, 4);
613
- break;
614
- case 8:
615
- $this->c = array(0, 1, 3, 4);
616
- }
617
-
618
- $w = array_values(unpack('N*words', $this->key));
619
-
620
- $length = $this->Nb * ($this->Nr + 1);
621
- for ($i = $this->Nk; $i < $length; $i++) {
622
- $temp = $w[$i - 1];
623
- if ($i % $this->Nk == 0) {
624
- // according to <http://php.net/language.types.integer>, "the size of an integer is platform-dependent".
625
- // on a 32-bit machine, it's 32-bits, and on a 64-bit machine, it's 64-bits. on a 32-bit machine,
626
- // 0xFFFFFFFF << 8 == 0xFFFFFF00, but on a 64-bit machine, it equals 0xFFFFFFFF00. as such, doing 'and'
627
- // with 0xFFFFFFFF (or 0xFFFFFF00) on a 32-bit machine is unnecessary, but on a 64-bit machine, it is.
628
- $temp = (($temp << 8) & 0xFFFFFF00) | (($temp >> 24) & 0x000000FF); // rotWord
629
- $temp = $this->_subWord($temp) ^ $rcon[$i / $this->Nk];
630
- } elseif ($this->Nk > 6 && $i % $this->Nk == 4) {
631
- $temp = $this->_subWord($temp);
632
- }
633
- $w[$i] = $w[$i - $this->Nk] ^ $temp;
634
- }
635
-
636
- // convert the key schedule from a vector of $Nb * ($Nr + 1) length to a matrix with $Nr + 1 rows and $Nb columns
637
- // and generate the inverse key schedule. more specifically,
638
- // according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=23> (section 5.3.3),
639
- // "The key expansion for the Inverse Cipher is defined as follows:
640
- // 1. Apply the Key Expansion.
641
- // 2. Apply InvMixColumn to all Round Keys except the first and the last one."
642
- // also, see fips-197.pdf#page=27, "5.3.5 Equivalent Inverse Cipher"
643
- list($dt0, $dt1, $dt2, $dt3) = $this->_getInvTables();
644
- $temp = $this->w = $this->dw = array();
645
- for ($i = $row = $col = 0; $i < $length; $i++, $col++) {
646
- if ($col == $this->Nb) {
647
- if ($row == 0) {
648
- $this->dw[0] = $this->w[0];
649
- } else {
650
- // subWord + invMixColumn + invSubWord = invMixColumn
651
- $j = 0;
652
- while ($j < $this->Nb) {
653
- $dw = $this->_subWord($this->w[$row][$j]);
654
- $temp[$j] = $dt0[$dw >> 24 & 0x000000FF] ^
655
- $dt1[$dw >> 16 & 0x000000FF] ^
656
- $dt2[$dw >> 8 & 0x000000FF] ^
657
- $dt3[$dw & 0x000000FF];
658
- $j++;
659
- }
660
- $this->dw[$row] = $temp;
661
- }
662
-
663
- $col = 0;
664
- $row++;
665
- }
666
- $this->w[$row][$col] = $w[$i];
667
- }
668
-
669
- $this->dw[$row] = $this->w[$row];
670
-
671
- // Converting to 1-dim key arrays (both ascending)
672
- $this->dw = array_reverse($this->dw);
673
- $w = array_pop($this->w);
674
- $dw = array_pop($this->dw);
675
- foreach ($this->w as $r => $wr) {
676
- foreach ($wr as $c => $wc) {
677
- $w[] = $wc;
678
- $dw[] = $this->dw[$r][$c];
679
- }
680
- }
681
- $this->w = $w;
682
- $this->dw = $dw;
683
- }
684
-
685
- /**
686
- * Performs S-Box substitutions
687
- *
688
- * @access private
689
- * @param int $word
690
- */
691
- function _subWord($word)
692
- {
693
- static $sbox;
694
- if (empty($sbox)) {
695
- list(, , , , $sbox) = $this->_getTables();
696
- }
697
-
698
- return $sbox[$word & 0x000000FF] |
699
- ($sbox[$word >> 8 & 0x000000FF] << 8) |
700
- ($sbox[$word >> 16 & 0x000000FF] << 16) |
701
- ($sbox[$word >> 24 & 0x000000FF] << 24);
702
- }
703
-
704
- /**
705
- * Provides the mixColumns and sboxes tables
706
- *
707
- * @see Crypt_Rijndael:_encryptBlock()
708
- * @see Crypt_Rijndael:_setupInlineCrypt()
709
- * @see Crypt_Rijndael:_subWord()
710
- * @access private
711
- * @return array &$tables
712
- */
713
- function &_getTables()
714
- {
715
- static $tables;
716
- if (empty($tables)) {
717
- // according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=19> (section 5.2.1),
718
- // precomputed tables can be used in the mixColumns phase. in that example, they're assigned t0...t3, so
719
- // those are the names we'll use.
720
- $t3 = array_map('intval', array(
721
- // with array_map('intval', ...) we ensure we have only int's and not
722
- // some slower floats converted by php automatically on high values
723
- 0x6363A5C6, 0x7C7C84F8, 0x777799EE, 0x7B7B8DF6, 0xF2F20DFF, 0x6B6BBDD6, 0x6F6FB1DE, 0xC5C55491,
724
- 0x30305060, 0x01010302, 0x6767A9CE, 0x2B2B7D56, 0xFEFE19E7, 0xD7D762B5, 0xABABE64D, 0x76769AEC,
725
- 0xCACA458F, 0x82829D1F, 0xC9C94089, 0x7D7D87FA, 0xFAFA15EF, 0x5959EBB2, 0x4747C98E, 0xF0F00BFB,
726
- 0xADADEC41, 0xD4D467B3, 0xA2A2FD5F, 0xAFAFEA45, 0x9C9CBF23, 0xA4A4F753, 0x727296E4, 0xC0C05B9B,
727
- 0xB7B7C275, 0xFDFD1CE1, 0x9393AE3D, 0x26266A4C, 0x36365A6C, 0x3F3F417E, 0xF7F702F5, 0xCCCC4F83,
728
- 0x34345C68, 0xA5A5F451, 0xE5E534D1, 0xF1F108F9, 0x717193E2, 0xD8D873AB, 0x31315362, 0x15153F2A,
729
- 0x04040C08, 0xC7C75295, 0x23236546, 0xC3C35E9D, 0x18182830, 0x9696A137, 0x05050F0A, 0x9A9AB52F,
730
- 0x0707090E, 0x12123624, 0x80809B1B, 0xE2E23DDF, 0xEBEB26CD, 0x2727694E, 0xB2B2CD7F, 0x75759FEA,
731
- 0x09091B12, 0x83839E1D, 0x2C2C7458, 0x1A1A2E34, 0x1B1B2D36, 0x6E6EB2DC, 0x5A5AEEB4, 0xA0A0FB5B,
732
- 0x5252F6A4, 0x3B3B4D76, 0xD6D661B7, 0xB3B3CE7D, 0x29297B52, 0xE3E33EDD, 0x2F2F715E, 0x84849713,
733
- 0x5353F5A6, 0xD1D168B9, 0x00000000, 0xEDED2CC1, 0x20206040, 0xFCFC1FE3, 0xB1B1C879, 0x5B5BEDB6,
734
- 0x6A6ABED4, 0xCBCB468D, 0xBEBED967, 0x39394B72, 0x4A4ADE94, 0x4C4CD498, 0x5858E8B0, 0xCFCF4A85,
735
- 0xD0D06BBB, 0xEFEF2AC5, 0xAAAAE54F, 0xFBFB16ED, 0x4343C586, 0x4D4DD79A, 0x33335566, 0x85859411,
736
- 0x4545CF8A, 0xF9F910E9, 0x02020604, 0x7F7F81FE, 0x5050F0A0, 0x3C3C4478, 0x9F9FBA25, 0xA8A8E34B,
737
- 0x5151F3A2, 0xA3A3FE5D, 0x4040C080, 0x8F8F8A05, 0x9292AD3F, 0x9D9DBC21, 0x38384870, 0xF5F504F1,
738
- 0xBCBCDF63, 0xB6B6C177, 0xDADA75AF, 0x21216342, 0x10103020, 0xFFFF1AE5, 0xF3F30EFD, 0xD2D26DBF,
739
- 0xCDCD4C81, 0x0C0C1418, 0x13133526, 0xECEC2FC3, 0x5F5FE1BE, 0x9797A235, 0x4444CC88, 0x1717392E,
740
- 0xC4C45793, 0xA7A7F255, 0x7E7E82FC, 0x3D3D477A, 0x6464ACC8, 0x5D5DE7BA, 0x19192B32, 0x737395E6,
741
- 0x6060A0C0, 0x81819819, 0x4F4FD19E, 0xDCDC7FA3, 0x22226644, 0x2A2A7E54, 0x9090AB3B, 0x8888830B,
742
- 0x4646CA8C, 0xEEEE29C7, 0xB8B8D36B, 0x14143C28, 0xDEDE79A7, 0x5E5EE2BC, 0x0B0B1D16, 0xDBDB76AD,
743
- 0xE0E03BDB, 0x32325664, 0x3A3A4E74, 0x0A0A1E14, 0x4949DB92, 0x06060A0C, 0x24246C48, 0x5C5CE4B8,
744
- 0xC2C25D9F, 0xD3D36EBD, 0xACACEF43, 0x6262A6C4, 0x9191A839, 0x9595A431, 0xE4E437D3, 0x79798BF2,
745
- 0xE7E732D5, 0xC8C8438B, 0x3737596E, 0x6D6DB7DA, 0x8D8D8C01, 0xD5D564B1, 0x4E4ED29C, 0xA9A9E049,
746
- 0x6C6CB4D8, 0x5656FAAC, 0xF4F407F3, 0xEAEA25CF, 0x6565AFCA, 0x7A7A8EF4, 0xAEAEE947, 0x08081810,
747
- 0xBABAD56F, 0x787888F0, 0x25256F4A, 0x2E2E725C, 0x1C1C2438, 0xA6A6F157, 0xB4B4C773, 0xC6C65197,
748
- 0xE8E823CB, 0xDDDD7CA1, 0x74749CE8, 0x1F1F213E, 0x4B4BDD96, 0xBDBDDC61, 0x8B8B860D, 0x8A8A850F,
749
- 0x707090E0, 0x3E3E427C, 0xB5B5C471, 0x6666AACC, 0x4848D890, 0x03030506, 0xF6F601F7, 0x0E0E121C,
750
- 0x6161A3C2, 0x35355F6A, 0x5757F9AE, 0xB9B9D069, 0x86869117, 0xC1C15899, 0x1D1D273A, 0x9E9EB927,
751
- 0xE1E138D9, 0xF8F813EB, 0x9898B32B, 0x11113322, 0x6969BBD2, 0xD9D970A9, 0x8E8E8907, 0x9494A733,
752
- 0x9B9BB62D, 0x1E1E223C, 0x87879215, 0xE9E920C9, 0xCECE4987, 0x5555FFAA, 0x28287850, 0xDFDF7AA5,
753
- 0x8C8C8F03, 0xA1A1F859, 0x89898009, 0x0D0D171A, 0xBFBFDA65, 0xE6E631D7, 0x4242C684, 0x6868B8D0,
754
- 0x4141C382, 0x9999B029, 0x2D2D775A, 0x0F0F111E, 0xB0B0CB7B, 0x5454FCA8, 0xBBBBD66D, 0x16163A2C
755
- ));
756
-
757
- foreach ($t3 as $t3i) {
758
- $t0[] = (($t3i << 24) & 0xFF000000) | (($t3i >> 8) & 0x00FFFFFF);
759
- $t1[] = (($t3i << 16) & 0xFFFF0000) | (($t3i >> 16) & 0x0000FFFF);
760
- $t2[] = (($t3i << 8) & 0xFFFFFF00) | (($t3i >> 24) & 0x000000FF);
761
- }
762
-
763
- $tables = array(
764
- // The Precomputed mixColumns tables t0 - t3
765
- $t0,
766
- $t1,
767
- $t2,
768
- $t3,
769
- // The SubByte S-Box
770
- array(
771
- 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
772
- 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
773
- 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
774
- 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
775
- 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
776
- 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
777
- 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
778
- 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
779
- 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
780
- 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
781
- 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
782
- 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
783
- 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
784
- 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
785
- 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
786
- 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
787
- )
788
- );
789
- }
790
- return $tables;
791
- }
792
-
793
- /**
794
- * Provides the inverse mixColumns and inverse sboxes tables
795
- *
796
- * @see Crypt_Rijndael:_decryptBlock()
797
- * @see Crypt_Rijndael:_setupInlineCrypt()
798
- * @see Crypt_Rijndael:_setupKey()
799
- * @access private
800
- * @return array &$tables
801
- */
802
- function &_getInvTables()
803
- {
804
- static $tables;
805
- if (empty($tables)) {
806
- $dt3 = array_map('intval', array(
807
- 0xF4A75051, 0x4165537E, 0x17A4C31A, 0x275E963A, 0xAB6BCB3B, 0x9D45F11F, 0xFA58ABAC, 0xE303934B,
808
- 0x30FA5520, 0x766DF6AD, 0xCC769188, 0x024C25F5, 0xE5D7FC4F, 0x2ACBD7C5, 0x35448026, 0x62A38FB5,
809
- 0xB15A49DE, 0xBA1B6725, 0xEA0E9845, 0xFEC0E15D, 0x2F7502C3, 0x4CF01281, 0x4697A38D, 0xD3F9C66B,
810
- 0x8F5FE703, 0x929C9515, 0x6D7AEBBF, 0x5259DA95, 0xBE832DD4, 0x7421D358, 0xE0692949, 0xC9C8448E,
811
- 0xC2896A75, 0x8E7978F4, 0x583E6B99, 0xB971DD27, 0xE14FB6BE, 0x88AD17F0, 0x20AC66C9, 0xCE3AB47D,
812
- 0xDF4A1863, 0x1A3182E5, 0x51336097, 0x537F4562, 0x6477E0B1, 0x6BAE84BB, 0x81A01CFE, 0x082B94F9,
813
- 0x48685870, 0x45FD198F, 0xDE6C8794, 0x7BF8B752, 0x73D323AB, 0x4B02E272, 0x1F8F57E3, 0x55AB2A66,
814
- 0xEB2807B2, 0xB5C2032F, 0xC57B9A86, 0x3708A5D3, 0x2887F230, 0xBFA5B223, 0x036ABA02, 0x16825CED,
815
- 0xCF1C2B8A, 0x79B492A7, 0x07F2F0F3, 0x69E2A14E, 0xDAF4CD65, 0x05BED506, 0x34621FD1, 0xA6FE8AC4,
816
- 0x2E539D34, 0xF355A0A2, 0x8AE13205, 0xF6EB75A4, 0x83EC390B, 0x60EFAA40, 0x719F065E, 0x6E1051BD,
817
- 0x218AF93E, 0xDD063D96, 0x3E05AEDD, 0xE6BD464D, 0x548DB591, 0xC45D0571, 0x06D46F04, 0x5015FF60,
818
- 0x98FB2419, 0xBDE997D6, 0x4043CC89, 0xD99E7767, 0xE842BDB0, 0x898B8807, 0x195B38E7, 0xC8EEDB79,
819
- 0x7C0A47A1, 0x420FE97C, 0x841EC9F8, 0x00000000, 0x80868309, 0x2BED4832, 0x1170AC1E, 0x5A724E6C,
820
- 0x0EFFFBFD, 0x8538560F, 0xAED51E3D, 0x2D392736, 0x0FD9640A, 0x5CA62168, 0x5B54D19B, 0x362E3A24,
821
- 0x0A67B10C, 0x57E70F93, 0xEE96D2B4, 0x9B919E1B, 0xC0C54F80, 0xDC20A261, 0x774B695A, 0x121A161C,
822
- 0x93BA0AE2, 0xA02AE5C0, 0x22E0433C, 0x1B171D12, 0x090D0B0E, 0x8BC7ADF2, 0xB6A8B92D, 0x1EA9C814,
823
- 0xF1198557, 0x75074CAF, 0x99DDBBEE, 0x7F60FDA3, 0x01269FF7, 0x72F5BC5C, 0x663BC544, 0xFB7E345B,
824
- 0x4329768B, 0x23C6DCCB, 0xEDFC68B6, 0xE4F163B8, 0x31DCCAD7, 0x63851042, 0x97224013, 0xC6112084,
825
- 0x4A247D85, 0xBB3DF8D2, 0xF93211AE, 0x29A16DC7, 0x9E2F4B1D, 0xB230F3DC, 0x8652EC0D, 0xC1E3D077,
826
- 0xB3166C2B, 0x70B999A9, 0x9448FA11, 0xE9642247, 0xFC8CC4A8, 0xF03F1AA0, 0x7D2CD856, 0x3390EF22,
827
- 0x494EC787, 0x38D1C1D9, 0xCAA2FE8C, 0xD40B3698, 0xF581CFA6, 0x7ADE28A5, 0xB78E26DA, 0xADBFA43F,
828
- 0x3A9DE42C, 0x78920D50, 0x5FCC9B6A, 0x7E466254, 0x8D13C2F6, 0xD8B8E890, 0x39F75E2E, 0xC3AFF582,
829
- 0x5D80BE9F, 0xD0937C69, 0xD52DA96F, 0x2512B3CF, 0xAC993BC8, 0x187DA710, 0x9C636EE8, 0x3BBB7BDB,
830
- 0x267809CD, 0x5918F46E, 0x9AB701EC, 0x4F9AA883, 0x956E65E6, 0xFFE67EAA, 0xBCCF0821, 0x15E8E6EF,
831
- 0xE79BD9BA, 0x6F36CE4A, 0x9F09D4EA, 0xB07CD629, 0xA4B2AF31, 0x3F23312A, 0xA59430C6, 0xA266C035,
832
- 0x4EBC3774, 0x82CAA6FC, 0x90D0B0E0, 0xA7D81533, 0x04984AF1, 0xECDAF741, 0xCD500E7F, 0x91F62F17,
833
- 0x4DD68D76, 0xEFB04D43, 0xAA4D54CC, 0x9604DFE4, 0xD1B5E39E, 0x6A881B4C, 0x2C1FB8C1, 0x65517F46,
834
- 0x5EEA049D, 0x8C355D01, 0x877473FA, 0x0B412EFB, 0x671D5AB3, 0xDBD25292, 0x105633E9, 0xD647136D,
835
- 0xD7618C9A, 0xA10C7A37, 0xF8148E59, 0x133C89EB, 0xA927EECE, 0x61C935B7, 0x1CE5EDE1, 0x47B13C7A,
836
- 0xD2DF599C, 0xF2733F55, 0x14CE7918, 0xC737BF73, 0xF7CDEA53, 0xFDAA5B5F, 0x3D6F14DF, 0x44DB8678,
837
- 0xAFF381CA, 0x68C43EB9, 0x24342C38, 0xA3405FC2, 0x1DC37216, 0xE2250CBC, 0x3C498B28, 0x0D9541FF,
838
- 0xA8017139, 0x0CB3DE08, 0xB4E49CD8, 0x56C19064, 0xCB84617B, 0x32B670D5, 0x6C5C7448, 0xB85742D0
839
- ));
840
-
841
- foreach ($dt3 as $dt3i) {
842
- $dt0[] = (($dt3i << 24) & 0xFF000000) | (($dt3i >> 8) & 0x00FFFFFF);
843
- $dt1[] = (($dt3i << 16) & 0xFFFF0000) | (($dt3i >> 16) & 0x0000FFFF);
844
- $dt2[] = (($dt3i << 8) & 0xFFFFFF00) | (($dt3i >> 24) & 0x000000FF);
845
- };
846
-
847
- $tables = array(
848
- // The Precomputed inverse mixColumns tables dt0 - dt3
849
- $dt0,
850
- $dt1,
851
- $dt2,
852
- $dt3,
853
- // The inverse SubByte S-Box
854
- array(
855
- 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
856
- 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
857
- 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
858
- 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
859
- 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
860
- 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
861
- 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
862
- 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
863
- 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
864
- 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
865
- 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
866
- 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
867
- 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
868
- 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
869
- 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
870
- 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
871
- )
872
- );
873
- }
874
- return $tables;
875
- }
876
-
877
- /**
878
- * Setup the performance-optimized function for de/encrypt()
879
- *
880
- * @see Crypt_Base::_setupInlineCrypt()
881
- * @access private
882
- */
883
- function _setupInlineCrypt()
884
- {
885
- // Note: _setupInlineCrypt() will be called only if $this->changed === true
886
- // So here we are'nt under the same heavy timing-stress as we are in _de/encryptBlock() or de/encrypt().
887
- // However...the here generated function- $code, stored as php callback in $this->inline_crypt, must work as fast as even possible.
888
-
889
- $lambda_functions =& Crypt_Rijndael::_getLambdaFunctions();
890
-
891
- // We create max. 10 hi-optimized code for memory reason. Means: For each $key one ultra fast inline-crypt function.
892
- // (Currently, for Crypt_Rijndael/AES, one generated $lambda_function cost on php5.5@32bit ~80kb unfreeable mem and ~130kb on php5.5@64bit)
893
- // After that, we'll still create very fast optimized code but not the hi-ultimative code, for each $mode one.
894
- $gen_hi_opt_code = (bool)(count($lambda_functions) < 10);
895
-
896
- // Generation of a uniqe hash for our generated code
897
- $code_hash = "Crypt_Rijndael, {$this->mode}, {$this->Nr}, {$this->Nb}";
898
- if ($gen_hi_opt_code) {
899
- $code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key);
900
- }
901
-
902
- if (!isset($lambda_functions[$code_hash])) {
903
- switch (true) {
904
- case $gen_hi_opt_code:
905
- // The hi-optimized $lambda_functions will use the key-words hardcoded for better performance.
906
- $w = $this->w;
907
- $dw = $this->dw;
908
- $init_encrypt = '';
909
- $init_decrypt = '';
910
- break;
911
- default:
912
- for ($i = 0, $cw = count($this->w); $i < $cw; ++$i) {
913
- $w[] = '$w[' . $i . ']';
914
- $dw[] = '$dw[' . $i . ']';
915
- }
916
- $init_encrypt = '$w = $self->w;';
917
- $init_decrypt = '$dw = $self->dw;';
918
- }
919
-
920
- $Nr = $this->Nr;
921
- $Nb = $this->Nb;
922
- $c = $this->c;
923
-
924
- // Generating encrypt code:
925
- $init_encrypt.= '
926
- static $tables;
927
- if (empty($tables)) {
928
- $tables = &$self->_getTables();
929
- }
930
- $t0 = $tables[0];
931
- $t1 = $tables[1];
932
- $t2 = $tables[2];
933
- $t3 = $tables[3];
934
- $sbox = $tables[4];
935
- ';
936
-
937
- $s = 'e';
938
- $e = 's';
939
- $wc = $Nb - 1;
940
-
941
- // Preround: addRoundKey
942
- $encrypt_block = '$in = unpack("N*", $in);'."\n";
943
- for ($i = 0; $i < $Nb; ++$i) {
944
- $encrypt_block .= '$s'.$i.' = $in['.($i + 1).'] ^ '.$w[++$wc].";\n";
945
- }
946
-
947
- // Mainrounds: shiftRows + subWord + mixColumns + addRoundKey
948
- for ($round = 1; $round < $Nr; ++$round) {
949
- list($s, $e) = array($e, $s);
950
- for ($i = 0; $i < $Nb; ++$i) {
951
- $encrypt_block.=
952
- '$'.$e.$i.' =
953
- $t0[($'.$s.$i .' >> 24) & 0xff] ^
954
- $t1[($'.$s.(($i + $c[1]) % $Nb).' >> 16) & 0xff] ^
955
- $t2[($'.$s.(($i + $c[2]) % $Nb).' >> 8) & 0xff] ^
956
- $t3[ $'.$s.(($i + $c[3]) % $Nb).' & 0xff] ^
957
- '.$w[++$wc].";\n";
958
- }
959
- }
960
-
961
- // Finalround: subWord + shiftRows + addRoundKey
962
- for ($i = 0; $i < $Nb; ++$i) {
963
- $encrypt_block.=
964
- '$'.$e.$i.' =
965
- $sbox[ $'.$e.$i.' & 0xff] |
966
- ($sbox[($'.$e.$i.' >> 8) & 0xff] << 8) |
967
- ($sbox[($'.$e.$i.' >> 16) & 0xff] << 16) |
968
- ($sbox[($'.$e.$i.' >> 24) & 0xff] << 24);'."\n";
969
- }
970
- $encrypt_block .= '$in = pack("N*"'."\n";
971
- for ($i = 0; $i < $Nb; ++$i) {
972
- $encrypt_block.= ',
973
- ($'.$e.$i .' & '.((int)0xFF000000).') ^
974
- ($'.$e.(($i + $c[1]) % $Nb).' & 0x00FF0000 ) ^
975
- ($'.$e.(($i + $c[2]) % $Nb).' & 0x0000FF00 ) ^
976
- ($'.$e.(($i + $c[3]) % $Nb).' & 0x000000FF ) ^
977
- '.$w[$i]."\n";
978
- }
979
- $encrypt_block .= ');';
980
-
981
- // Generating decrypt code:
982
- $init_decrypt.= '
983
- static $invtables;
984
- if (empty($invtables)) {
985
- $invtables = &$self->_getInvTables();
986
- }
987
- $dt0 = $invtables[0];
988
- $dt1 = $invtables[1];
989
- $dt2 = $invtables[2];
990
- $dt3 = $invtables[3];
991
- $isbox = $invtables[4];
992
- ';
993
-
994
- $s = 'e';
995
- $e = 's';
996
- $wc = $Nb - 1;
997
-
998
- // Preround: addRoundKey
999
- $decrypt_block = '$in = unpack("N*", $in);'."\n";
1000
- for ($i = 0; $i < $Nb; ++$i) {
1001
- $decrypt_block .= '$s'.$i.' = $in['.($i + 1).'] ^ '.$dw[++$wc].';'."\n";
1002
- }
1003
-
1004
- // Mainrounds: shiftRows + subWord + mixColumns + addRoundKey
1005
- for ($round = 1; $round < $Nr; ++$round) {
1006
- list($s, $e) = array($e, $s);
1007
- for ($i = 0; $i < $Nb; ++$i) {
1008
- $decrypt_block.=
1009
- '$'.$e.$i.' =
1010
- $dt0[($'.$s.$i .' >> 24) & 0xff] ^
1011
- $dt1[($'.$s.(($Nb + $i - $c[1]) % $Nb).' >> 16) & 0xff] ^
1012
- $dt2[($'.$s.(($Nb + $i - $c[2]) % $Nb).' >> 8) & 0xff] ^
1013
- $dt3[ $'.$s.(($Nb + $i - $c[3]) % $Nb).' & 0xff] ^
1014
- '.$dw[++$wc].";\n";
1015
- }
1016
- }
1017
-
1018
- // Finalround: subWord + shiftRows + addRoundKey
1019
- for ($i = 0; $i < $Nb; ++$i) {
1020
- $decrypt_block.=
1021
- '$'.$e.$i.' =
1022
- $isbox[ $'.$e.$i.' & 0xff] |
1023
- ($isbox[($'.$e.$i.' >> 8) & 0xff] << 8) |
1024
- ($isbox[($'.$e.$i.' >> 16) & 0xff] << 16) |
1025
- ($isbox[($'.$e.$i.' >> 24) & 0xff] << 24);'."\n";
1026
- }
1027
- $decrypt_block .= '$in = pack("N*"'."\n";
1028
- for ($i = 0; $i < $Nb; ++$i) {
1029
- $decrypt_block.= ',
1030
- ($'.$e.$i. ' & '.((int)0xFF000000).') ^
1031
- ($'.$e.(($Nb + $i - $c[1]) % $Nb).' & 0x00FF0000 ) ^
1032
- ($'.$e.(($Nb + $i - $c[2]) % $Nb).' & 0x0000FF00 ) ^
1033
- ($'.$e.(($Nb + $i - $c[3]) % $Nb).' & 0x000000FF ) ^
1034
- '.$dw[$i]."\n";
1035
- }
1036
- $decrypt_block .= ');';
1037
-
1038
- $lambda_functions[$code_hash] = $this->_createInlineCryptFunction(
1039
- array(
1040
- 'init_crypt' => '',
1041
- 'init_encrypt' => $init_encrypt,
1042
- 'init_decrypt' => $init_decrypt,
1043
- 'encrypt_block' => $encrypt_block,
1044
- 'decrypt_block' => $decrypt_block
1045
- )
1046
- );
1047
- }
1048
- $this->inline_crypt = $lambda_functions[$code_hash];
1049
- }
1050
- }
1
+ <?php
2
+ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
+ /**
4
+ * Pure-PHP implementation of Rijndael.
5
+ *
6
+ * Uses mcrypt, if available/possible, and an internal implementation, otherwise.
7
+ *
8
+ * PHP versions 4 and 5
9
+ *
10
+ * If {@link self::setBlockLength() setBlockLength()} isn't called, it'll be assumed to be 128 bits. If
11
+ * {@link self::setKeyLength() setKeyLength()} isn't called, it'll be calculated from
12
+ * {@link self::setKey() setKey()}. ie. if the key is 128-bits, the key length will be 128-bits. If it's
13
+ * 136-bits it'll be null-padded to 192-bits and 192 bits will be the key length until
14
+ * {@link self::setKey() setKey()} is called, again, at which point, it'll be recalculated.
15
+ *
16
+ * Not all Rijndael implementations may support 160-bits or 224-bits as the block length / key length. mcrypt, for example,
17
+ * does not. AES, itself, only supports block lengths of 128 and key lengths of 128, 192, and 256.
18
+ * {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=10 Rijndael-ammended.pdf#page=10} defines the
19
+ * algorithm for block lengths of 192 and 256 but not for block lengths / key lengths of 160 and 224. Indeed, 160 and 224
20
+ * are first defined as valid key / block lengths in
21
+ * {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=44 Rijndael-ammended.pdf#page=44}:
22
+ * Extensions: Other block and Cipher Key lengths.
23
+ * Note: Use of 160/224-bit Keys must be explicitly set by setKeyLength(160) respectively setKeyLength(224).
24
+ *
25
+ * {@internal The variable names are the same as those in
26
+ * {@link http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf#page=10 fips-197.pdf#page=10}.}}
27
+ *
28
+ * Here's a short example of how to use this library:
29
+ * <code>
30
+ * <?php
31
+ * include 'Crypt/Rijndael.php';
32
+ *
33
+ * $rijndael = new Crypt_Rijndael();
34
+ *
35
+ * $rijndael->setKey('abcdefghijklmnop');
36
+ *
37
+ * $size = 10 * 1024;
38
+ * $plaintext = '';
39
+ * for ($i = 0; $i < $size; $i++) {
40
+ * $plaintext.= 'a';
41
+ * }
42
+ *
43
+ * echo $rijndael->decrypt($rijndael->encrypt($plaintext));
44
+ * ?>
45
+ * </code>
46
+ *
47
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
48
+ * of this software and associated documentation files (the "Software"), to deal
49
+ * in the Software without restriction, including without limitation the rights
50
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
51
+ * copies of the Software, and to permit persons to whom the Software is
52
+ * furnished to do so, subject to the following conditions:
53
+ *
54
+ * The above copyright notice and this permission notice shall be included in
55
+ * all copies or substantial portions of the Software.
56
+ *
57
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
58
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
59
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
60
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
61
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
62
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
63
+ * THE SOFTWARE.
64
+ *
65
+ * @category Crypt
66
+ * @package Crypt_Rijndael
67
+ * @author Jim Wigginton <terrafrost@php.net>
68
+ * @copyright 2008 Jim Wigginton
69
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
70
+ * @link http://phpseclib.sourceforge.net
71
+ */
72
+
73
+ /**
74
+ * Include Crypt_Base
75
+ *
76
+ * Base cipher class
77
+ */
78
+ if (!class_exists('Crypt_Base')) {
79
+ include_once 'Base.php';
80
+ }
81
+
82
+ /**#@+
83
+ * @access public
84
+ * @see self::encrypt()
85
+ * @see self::decrypt()
86
+ */
87
+ /**
88
+ * Encrypt / decrypt using the Counter mode.
89
+ *
90
+ * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
91
+ *
92
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
93
+ */
94
+ define('CRYPT_RIJNDAEL_MODE_CTR', CRYPT_MODE_CTR);
95
+ /**
96
+ * Encrypt / decrypt using the Electronic Code Book mode.
97
+ *
98
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
99
+ */
100
+ define('CRYPT_RIJNDAEL_MODE_ECB', CRYPT_MODE_ECB);
101
+ /**
102
+ * Encrypt / decrypt using the Code Book Chaining mode.
103
+ *
104
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
105
+ */
106
+ define('CRYPT_RIJNDAEL_MODE_CBC', CRYPT_MODE_CBC);
107
+ /**
108
+ * Encrypt / decrypt using the Cipher Feedback mode.
109
+ *
110
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29
111
+ */
112
+ define('CRYPT_RIJNDAEL_MODE_CFB', CRYPT_MODE_CFB);
113
+ /**
114
+ * Encrypt / decrypt using the Cipher Feedback mode.
115
+ *
116
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29
117
+ */
118
+ define('CRYPT_RIJNDAEL_MODE_OFB', CRYPT_MODE_OFB);
119
+ /**#@-*/
120
+
121
+ /**
122
+ * Pure-PHP implementation of Rijndael.
123
+ *
124
+ * @package Crypt_Rijndael
125
+ * @author Jim Wigginton <terrafrost@php.net>
126
+ * @access public
127
+ */
128
+ class Crypt_Rijndael extends Crypt_Base
129
+ {
130
+ /**
131
+ * The namespace used by the cipher for its constants.
132
+ *
133
+ * @see Crypt_Base::const_namespace
134
+ * @var string
135
+ * @access private
136
+ */
137
+ var $const_namespace = 'RIJNDAEL';
138
+
139
+ /**
140
+ * The mcrypt specific name of the cipher
141
+ *
142
+ * Mcrypt is useable for 128/192/256-bit $block_size/$key_length. For 160/224 not.
143
+ * Crypt_Rijndael determines automatically whether mcrypt is useable
144
+ * or not for the current $block_size/$key_length.
145
+ * In case of, $cipher_name_mcrypt will be set dynamically at run time accordingly.
146
+ *
147
+ * @see Crypt_Base::cipher_name_mcrypt
148
+ * @see Crypt_Base::engine
149
+ * @see self::isValidEngine()
150
+ * @var string
151
+ * @access private
152
+ */
153
+ var $cipher_name_mcrypt = 'rijndael-128';
154
+
155
+ /**
156
+ * The default salt used by setPassword()
157
+ *
158
+ * @see Crypt_Base::password_default_salt
159
+ * @see Crypt_Base::setPassword()
160
+ * @var string
161
+ * @access private
162
+ */
163
+ var $password_default_salt = 'phpseclib';
164
+
165
+ /**
166
+ * The Key Schedule
167
+ *
168
+ * @see self::_setup()
169
+ * @var array
170
+ * @access private
171
+ */
172
+ var $w;
173
+
174
+ /**
175
+ * The Inverse Key Schedule
176
+ *
177
+ * @see self::_setup()
178
+ * @var array
179
+ * @access private
180
+ */
181
+ var $dw;
182
+
183
+ /**
184
+ * The Block Length divided by 32
185
+ *
186
+ * @see self::setBlockLength()
187
+ * @var int
188
+ * @access private
189
+ * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4. Exists in conjunction with $block_size
190
+ * because the encryption / decryption / key schedule creation requires this number and not $block_size. We could
191
+ * derive this from $block_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
192
+ * of that, we'll just precompute it once.
193
+ */
194
+ var $Nb = 4;
195
+
196
+ /**
197
+ * The Key Length (in bytes)
198
+ *
199
+ * @see self::setKeyLength()
200
+ * @var int
201
+ * @access private
202
+ * @internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16. Exists in conjunction with $Nk
203
+ * because the encryption / decryption / key schedule creation requires this number and not $key_length. We could
204
+ * derive this from $key_length or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
205
+ * of that, we'll just precompute it once.
206
+ */
207
+ var $key_length = 16;
208
+
209
+ /**
210
+ * The Key Length divided by 32
211
+ *
212
+ * @see self::setKeyLength()
213
+ * @var int
214
+ * @access private
215
+ * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4
216
+ */
217
+ var $Nk = 4;
218
+
219
+ /**
220
+ * The Number of Rounds
221
+ *
222
+ * @var int
223
+ * @access private
224
+ * @internal The max value is 14, the min value is 10.
225
+ */
226
+ var $Nr;
227
+
228
+ /**
229
+ * Shift offsets
230
+ *
231
+ * @var array
232
+ * @access private
233
+ */
234
+ var $c;
235
+
236
+ /**
237
+ * Holds the last used key- and block_size information
238
+ *
239
+ * @var array
240
+ * @access private
241
+ */
242
+ var $kl;
243
+
244
+ /**
245
+ * Sets the key.
246
+ *
247
+ * Keys can be of any length. Rijndael, itself, requires the use of a key that's between 128-bits and 256-bits long and
248
+ * whose length is a multiple of 32. If the key is less than 256-bits and the key length isn't set, we round the length
249
+ * up to the closest valid key length, padding $key with null bytes. If the key is more than 256-bits, we trim the
250
+ * excess bits.
251
+ *
252
+ * If the key is not explicitly set, it'll be assumed to be all null bytes.
253
+ *
254
+ * Note: 160/224-bit keys must explicitly set by setKeyLength(), otherwise they will be round/pad up to 192/256 bits.
255
+ *
256
+ * @see Crypt_Base:setKey()
257
+ * @see self::setKeyLength()
258
+ * @access public
259
+ * @param string $key
260
+ */
261
+ function setKey($key)
262
+ {
263
+ if (!$this->explicit_key_length) {
264
+ $length = strlen($key);
265
+ switch (true) {
266
+ case $length <= 16:
267
+ $this->key_size = 16;
268
+ break;
269
+ case $length <= 20:
270
+ $this->key_size = 20;
271
+ break;
272
+ case $length <= 24:
273
+ $this->key_size = 24;
274
+ break;
275
+ case $length <= 28:
276
+ $this->key_size = 28;
277
+ break;
278
+ default:
279
+ $this->key_size = 32;
280
+ }
281
+ }
282
+ parent::setKey($key);
283
+ }
284
+
285
+ /**
286
+ * Sets the key length
287
+ *
288
+ * Valid key lengths are 128, 160, 192, 224, and 256. If the length is less than 128, it will be rounded up to
289
+ * 128. If the length is greater than 128 and invalid, it will be rounded down to the closest valid amount.
290
+ *
291
+ * Note: phpseclib extends Rijndael (and AES) for using 160- and 224-bit keys but they are officially not defined
292
+ * and the most (if not all) implementations are not able using 160/224-bit keys but round/pad them up to
293
+ * 192/256 bits as, for example, mcrypt will do.
294
+ *
295
+ * That said, if you want be compatible with other Rijndael and AES implementations,
296
+ * you should not setKeyLength(160) or setKeyLength(224).
297
+ *
298
+ * Additional: In case of 160- and 224-bit keys, phpseclib will/can, for that reason, not use
299
+ * the mcrypt php extension, even if available.
300
+ * This results then in slower encryption.
301
+ *
302
+ * @access public
303
+ * @param int $length
304
+ */
305
+ function setKeyLength($length)
306
+ {
307
+ switch (true) {
308
+ case $length <= 128:
309
+ $this->key_length = 16;
310
+ break;
311
+ case $length <= 160:
312
+ $this->key_length = 20;
313
+ break;
314
+ case $length <= 192:
315
+ $this->key_length = 24;
316
+ break;
317
+ case $length <= 224:
318
+ $this->key_length = 28;
319
+ break;
320
+ default:
321
+ $this->key_length = 32;
322
+ }
323
+
324
+ parent::setKeyLength($length);
325
+ }
326
+
327
+ /**
328
+ * Sets the block length
329
+ *
330
+ * Valid block lengths are 128, 160, 192, 224, and 256. If the length is less than 128, it will be rounded up to
331
+ * 128. If the length is greater than 128 and invalid, it will be rounded down to the closest valid amount.
332
+ *
333
+ * @access public
334
+ * @param int $length
335
+ */
336
+ function setBlockLength($length)
337
+ {
338
+ $length >>= 5;
339
+ if ($length > 8) {
340
+ $length = 8;
341
+ } elseif ($length < 4) {
342
+ $length = 4;
343
+ }
344
+ $this->Nb = $length;
345
+ $this->block_size = $length << 2;
346
+ $this->changed = true;
347
+ $this->_setEngine();
348
+ }
349
+
350
+ /**
351
+ * Test for engine validity
352
+ *
353
+ * This is mainly just a wrapper to set things up for Crypt_Base::isValidEngine()
354
+ *
355
+ * @see Crypt_Base::Crypt_Base()
356
+ * @param int $engine
357
+ * @access public
358
+ * @return bool
359
+ */
360
+ function isValidEngine($engine)
361
+ {
362
+ switch ($engine) {
363
+ case CRYPT_ENGINE_OPENSSL:
364
+ if ($this->block_size != 16) {
365
+ return false;
366
+ }
367
+ $this->cipher_name_openssl_ecb = 'aes-' . ($this->key_length << 3) . '-ecb';
368
+ $this->cipher_name_openssl = 'aes-' . ($this->key_length << 3) . '-' . $this->_openssl_translate_mode();
369
+ break;
370
+ case CRYPT_ENGINE_MCRYPT:
371
+ $this->cipher_name_mcrypt = 'rijndael-' . ($this->block_size << 3);
372
+ if ($this->key_length % 8) { // is it a 160/224-bit key?
373
+ // mcrypt is not usable for them, only for 128/192/256-bit keys
374
+ return false;
375
+ }
376
+ }
377
+
378
+ return parent::isValidEngine($engine);
379
+ }
380
+
381
+ /**
382
+ * Encrypts a block
383
+ *
384
+ * @access private
385
+ * @param string $in
386
+ * @return string
387
+ */
388
+ function _encryptBlock($in)
389
+ {
390
+ static $tables;
391
+ if (empty($tables)) {
392
+ $tables = &$this->_getTables();
393
+ }
394
+ $t0 = $tables[0];
395
+ $t1 = $tables[1];
396
+ $t2 = $tables[2];
397
+ $t3 = $tables[3];
398
+ $sbox = $tables[4];
399
+
400
+ $state = array();
401
+ $words = unpack('N*', $in);
402
+
403
+ $c = $this->c;
404
+ $w = $this->w;
405
+ $Nb = $this->Nb;
406
+ $Nr = $this->Nr;
407
+
408
+ // addRoundKey
409
+ $wc = $Nb - 1;
410
+ foreach ($words as $word) {
411
+ $state[] = $word ^ $w[++$wc];
412
+ }
413
+
414
+ // fips-197.pdf#page=19, "Figure 5. Pseudo Code for the Cipher", states that this loop has four components -
415
+ // subBytes, shiftRows, mixColumns, and addRoundKey. fips-197.pdf#page=30, "Implementation Suggestions Regarding
416
+ // Various Platforms" suggests that performs enhanced implementations are described in Rijndael-ammended.pdf.
417
+ // Rijndael-ammended.pdf#page=20, "Implementation aspects / 32-bit processor", discusses such an optimization.
418
+ // Unfortunately, the description given there is not quite correct. Per aes.spec.v316.pdf#page=19 [1],
419
+ // equation (7.4.7) is supposed to use addition instead of subtraction, so we'll do that here, as well.
420
+
421
+ // [1] http://fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.v316.pdf
422
+ $temp = array();
423
+ for ($round = 1; $round < $Nr; ++$round) {
424
+ $i = 0; // $c[0] == 0
425
+ $j = $c[1];
426
+ $k = $c[2];
427
+ $l = $c[3];
428
+
429
+ while ($i < $Nb) {
430
+ $temp[$i] = $t0[$state[$i] >> 24 & 0x000000FF] ^
431
+ $t1[$state[$j] >> 16 & 0x000000FF] ^
432
+ $t2[$state[$k] >> 8 & 0x000000FF] ^
433
+ $t3[$state[$l] & 0x000000FF] ^
434
+ $w[++$wc];
435
+ ++$i;
436
+ $j = ($j + 1) % $Nb;
437
+ $k = ($k + 1) % $Nb;
438
+ $l = ($l + 1) % $Nb;
439
+ }
440
+ $state = $temp;
441
+ }
442
+
443
+ // subWord
444
+ for ($i = 0; $i < $Nb; ++$i) {
445
+ $state[$i] = $sbox[$state[$i] & 0x000000FF] |
446
+ ($sbox[$state[$i] >> 8 & 0x000000FF] << 8) |
447
+ ($sbox[$state[$i] >> 16 & 0x000000FF] << 16) |
448
+ ($sbox[$state[$i] >> 24 & 0x000000FF] << 24);
449
+ }
450
+
451
+ // shiftRows + addRoundKey
452
+ $i = 0; // $c[0] == 0
453
+ $j = $c[1];
454
+ $k = $c[2];
455
+ $l = $c[3];
456
+ while ($i < $Nb) {
457
+ $temp[$i] = ($state[$i] & 0xFF000000) ^
458
+ ($state[$j] & 0x00FF0000) ^
459
+ ($state[$k] & 0x0000FF00) ^
460
+ ($state[$l] & 0x000000FF) ^
461
+ $w[$i];
462
+ ++$i;
463
+ $j = ($j + 1) % $Nb;
464
+ $k = ($k + 1) % $Nb;
465
+ $l = ($l + 1) % $Nb;
466
+ }
467
+
468
+ switch ($Nb) {
469
+ case 8:
470
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]);
471
+ case 7:
472
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]);
473
+ case 6:
474
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]);
475
+ case 5:
476
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]);
477
+ default:
478
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3]);
479
+ }
480
+ }
481
+
482
+ /**
483
+ * Decrypts a block
484
+ *
485
+ * @access private
486
+ * @param string $in
487
+ * @return string
488
+ */
489
+ function _decryptBlock($in)
490
+ {
491
+ static $invtables;
492
+ if (empty($invtables)) {
493
+ $invtables = &$this->_getInvTables();
494
+ }
495
+ $dt0 = $invtables[0];
496
+ $dt1 = $invtables[1];
497
+ $dt2 = $invtables[2];
498
+ $dt3 = $invtables[3];
499
+ $isbox = $invtables[4];
500
+
501
+ $state = array();
502
+ $words = unpack('N*', $in);
503
+
504
+ $c = $this->c;
505
+ $dw = $this->dw;
506
+ $Nb = $this->Nb;
507
+ $Nr = $this->Nr;
508
+
509
+ // addRoundKey
510
+ $wc = $Nb - 1;
511
+ foreach ($words as $word) {
512
+ $state[] = $word ^ $dw[++$wc];
513
+ }
514
+
515
+ $temp = array();
516
+ for ($round = $Nr - 1; $round > 0; --$round) {
517
+ $i = 0; // $c[0] == 0
518
+ $j = $Nb - $c[1];
519
+ $k = $Nb - $c[2];
520
+ $l = $Nb - $c[3];
521
+
522
+ while ($i < $Nb) {
523
+ $temp[$i] = $dt0[$state[$i] >> 24 & 0x000000FF] ^
524
+ $dt1[$state[$j] >> 16 & 0x000000FF] ^
525
+ $dt2[$state[$k] >> 8 & 0x000000FF] ^
526
+ $dt3[$state[$l] & 0x000000FF] ^
527
+ $dw[++$wc];
528
+ ++$i;
529
+ $j = ($j + 1) % $Nb;
530
+ $k = ($k + 1) % $Nb;
531
+ $l = ($l + 1) % $Nb;
532
+ }
533
+ $state = $temp;
534
+ }
535
+
536
+ // invShiftRows + invSubWord + addRoundKey
537
+ $i = 0; // $c[0] == 0
538
+ $j = $Nb - $c[1];
539
+ $k = $Nb - $c[2];
540
+ $l = $Nb - $c[3];
541
+
542
+ while ($i < $Nb) {
543
+ $word = ($state[$i] & 0xFF000000) |
544
+ ($state[$j] & 0x00FF0000) |
545
+ ($state[$k] & 0x0000FF00) |
546
+ ($state[$l] & 0x000000FF);
547
+
548
+ $temp[$i] = $dw[$i] ^ ($isbox[$word & 0x000000FF] |
549
+ ($isbox[$word >> 8 & 0x000000FF] << 8) |
550
+ ($isbox[$word >> 16 & 0x000000FF] << 16) |
551
+ ($isbox[$word >> 24 & 0x000000FF] << 24));
552
+ ++$i;
553
+ $j = ($j + 1) % $Nb;
554
+ $k = ($k + 1) % $Nb;
555
+ $l = ($l + 1) % $Nb;
556
+ }
557
+
558
+ switch ($Nb) {
559
+ case 8:
560
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]);
561
+ case 7:
562
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]);
563
+ case 6:
564
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]);
565
+ case 5:
566
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]);
567
+ default:
568
+ return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3]);
569
+ }
570
+ }
571
+
572
+ /**
573
+ * Setup the key (expansion)
574
+ *
575
+ * @see Crypt_Base::_setupKey()
576
+ * @access private
577
+ */
578
+ function _setupKey()
579
+ {
580
+ // Each number in $rcon is equal to the previous number multiplied by two in Rijndael's finite field.
581
+ // See http://en.wikipedia.org/wiki/Finite_field_arithmetic#Multiplicative_inverse
582
+ static $rcon = array(0,
583
+ 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000,
584
+ 0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000,
585
+ 0x6C000000, 0xD8000000, 0xAB000000, 0x4D000000, 0x9A000000,
586
+ 0x2F000000, 0x5E000000, 0xBC000000, 0x63000000, 0xC6000000,
587
+ 0x97000000, 0x35000000, 0x6A000000, 0xD4000000, 0xB3000000,
588
+ 0x7D000000, 0xFA000000, 0xEF000000, 0xC5000000, 0x91000000
589
+ );
590
+
591
+ if (isset($this->kl['key']) && $this->key === $this->kl['key'] && $this->key_length === $this->kl['key_length'] && $this->block_size === $this->kl['block_size']) {
592
+ // already expanded
593
+ return;
594
+ }
595
+ $this->kl = array('key' => $this->key, 'key_length' => $this->key_length, 'block_size' => $this->block_size);
596
+
597
+ $this->Nk = $this->key_length >> 2;
598
+ // see Rijndael-ammended.pdf#page=44
599
+ $this->Nr = max($this->Nk, $this->Nb) + 6;
600
+
601
+ // shift offsets for Nb = 5, 7 are defined in Rijndael-ammended.pdf#page=44,
602
+ // "Table 8: Shift offsets in Shiftrow for the alternative block lengths"
603
+ // shift offsets for Nb = 4, 6, 8 are defined in Rijndael-ammended.pdf#page=14,
604
+ // "Table 2: Shift offsets for different block lengths"
605
+ switch ($this->Nb) {
606
+ case 4:
607
+ case 5:
608
+ case 6:
609
+ $this->c = array(0, 1, 2, 3);
610
+ break;
611
+ case 7:
612
+ $this->c = array(0, 1, 2, 4);
613
+ break;
614
+ case 8:
615
+ $this->c = array(0, 1, 3, 4);
616
+ }
617
+
618
+ $w = array_values(unpack('N*words', $this->key));
619
+
620
+ $length = $this->Nb * ($this->Nr + 1);
621
+ for ($i = $this->Nk; $i < $length; $i++) {
622
+ $temp = $w[$i - 1];
623
+ if ($i % $this->Nk == 0) {
624
+ // according to <http://php.net/language.types.integer>, "the size of an integer is platform-dependent".
625
+ // on a 32-bit machine, it's 32-bits, and on a 64-bit machine, it's 64-bits. on a 32-bit machine,
626
+ // 0xFFFFFFFF << 8 == 0xFFFFFF00, but on a 64-bit machine, it equals 0xFFFFFFFF00. as such, doing 'and'
627
+ // with 0xFFFFFFFF (or 0xFFFFFF00) on a 32-bit machine is unnecessary, but on a 64-bit machine, it is.
628
+ $temp = (($temp << 8) & 0xFFFFFF00) | (($temp >> 24) & 0x000000FF); // rotWord
629
+ $temp = $this->_subWord($temp) ^ $rcon[$i / $this->Nk];
630
+ } elseif ($this->Nk > 6 && $i % $this->Nk == 4) {
631
+ $temp = $this->_subWord($temp);
632
+ }
633
+ $w[$i] = $w[$i - $this->Nk] ^ $temp;
634
+ }
635
+
636
+ // convert the key schedule from a vector of $Nb * ($Nr + 1) length to a matrix with $Nr + 1 rows and $Nb columns
637
+ // and generate the inverse key schedule. more specifically,
638
+ // according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=23> (section 5.3.3),
639
+ // "The key expansion for the Inverse Cipher is defined as follows:
640
+ // 1. Apply the Key Expansion.
641
+ // 2. Apply InvMixColumn to all Round Keys except the first and the last one."
642
+ // also, see fips-197.pdf#page=27, "5.3.5 Equivalent Inverse Cipher"
643
+ list($dt0, $dt1, $dt2, $dt3) = $this->_getInvTables();
644
+ $temp = $this->w = $this->dw = array();
645
+ for ($i = $row = $col = 0; $i < $length; $i++, $col++) {
646
+ if ($col == $this->Nb) {
647
+ if ($row == 0) {
648
+ $this->dw[0] = $this->w[0];
649
+ } else {
650
+ // subWord + invMixColumn + invSubWord = invMixColumn
651
+ $j = 0;
652
+ while ($j < $this->Nb) {
653
+ $dw = $this->_subWord($this->w[$row][$j]);
654
+ $temp[$j] = $dt0[$dw >> 24 & 0x000000FF] ^
655
+ $dt1[$dw >> 16 & 0x000000FF] ^
656
+ $dt2[$dw >> 8 & 0x000000FF] ^
657
+ $dt3[$dw & 0x000000FF];
658
+ $j++;
659
+ }
660
+ $this->dw[$row] = $temp;
661
+ }
662
+
663
+ $col = 0;
664
+ $row++;
665
+ }
666
+ $this->w[$row][$col] = $w[$i];
667
+ }
668
+
669
+ $this->dw[$row] = $this->w[$row];
670
+
671
+ // Converting to 1-dim key arrays (both ascending)
672
+ $this->dw = array_reverse($this->dw);
673
+ $w = array_pop($this->w);
674
+ $dw = array_pop($this->dw);
675
+ foreach ($this->w as $r => $wr) {
676
+ foreach ($wr as $c => $wc) {
677
+ $w[] = $wc;
678
+ $dw[] = $this->dw[$r][$c];
679
+ }
680
+ }
681
+ $this->w = $w;
682
+ $this->dw = $dw;
683
+ }
684
+
685
+ /**
686
+ * Performs S-Box substitutions
687
+ *
688
+ * @access private
689
+ * @param int $word
690
+ */
691
+ function _subWord($word)
692
+ {
693
+ static $sbox;
694
+ if (empty($sbox)) {
695
+ list(, , , , $sbox) = $this->_getTables();
696
+ }
697
+
698
+ return $sbox[$word & 0x000000FF] |
699
+ ($sbox[$word >> 8 & 0x000000FF] << 8) |
700
+ ($sbox[$word >> 16 & 0x000000FF] << 16) |
701
+ ($sbox[$word >> 24 & 0x000000FF] << 24);
702
+ }
703
+
704
+ /**
705
+ * Provides the mixColumns and sboxes tables
706
+ *
707
+ * @see Crypt_Rijndael:_encryptBlock()
708
+ * @see Crypt_Rijndael:_setupInlineCrypt()
709
+ * @see Crypt_Rijndael:_subWord()
710
+ * @access private
711
+ * @return array &$tables
712
+ */
713
+ function &_getTables()
714
+ {
715
+ static $tables;
716
+ if (empty($tables)) {
717
+ // according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=19> (section 5.2.1),
718
+ // precomputed tables can be used in the mixColumns phase. in that example, they're assigned t0...t3, so
719
+ // those are the names we'll use.
720
+ $t3 = array_map('intval', array(
721
+ // with array_map('intval', ...) we ensure we have only int's and not
722
+ // some slower floats converted by php automatically on high values
723
+ 0x6363A5C6, 0x7C7C84F8, 0x777799EE, 0x7B7B8DF6, 0xF2F20DFF, 0x6B6BBDD6, 0x6F6FB1DE, 0xC5C55491,
724
+ 0x30305060, 0x01010302, 0x6767A9CE, 0x2B2B7D56, 0xFEFE19E7, 0xD7D762B5, 0xABABE64D, 0x76769AEC,
725
+ 0xCACA458F, 0x82829D1F, 0xC9C94089, 0x7D7D87FA, 0xFAFA15EF, 0x5959EBB2, 0x4747C98E, 0xF0F00BFB,
726
+ 0xADADEC41, 0xD4D467B3, 0xA2A2FD5F, 0xAFAFEA45, 0x9C9CBF23, 0xA4A4F753, 0x727296E4, 0xC0C05B9B,
727
+ 0xB7B7C275, 0xFDFD1CE1, 0x9393AE3D, 0x26266A4C, 0x36365A6C, 0x3F3F417E, 0xF7F702F5, 0xCCCC4F83,
728
+ 0x34345C68, 0xA5A5F451, 0xE5E534D1, 0xF1F108F9, 0x717193E2, 0xD8D873AB, 0x31315362, 0x15153F2A,
729
+ 0x04040C08, 0xC7C75295, 0x23236546, 0xC3C35E9D, 0x18182830, 0x9696A137, 0x05050F0A, 0x9A9AB52F,
730
+ 0x0707090E, 0x12123624, 0x80809B1B, 0xE2E23DDF, 0xEBEB26CD, 0x2727694E, 0xB2B2CD7F, 0x75759FEA,
731
+ 0x09091B12, 0x83839E1D, 0x2C2C7458, 0x1A1A2E34, 0x1B1B2D36, 0x6E6EB2DC, 0x5A5AEEB4, 0xA0A0FB5B,
732
+ 0x5252F6A4, 0x3B3B4D76, 0xD6D661B7, 0xB3B3CE7D, 0x29297B52, 0xE3E33EDD, 0x2F2F715E, 0x84849713,
733
+ 0x5353F5A6, 0xD1D168B9, 0x00000000, 0xEDED2CC1, 0x20206040, 0xFCFC1FE3, 0xB1B1C879, 0x5B5BEDB6,
734
+ 0x6A6ABED4, 0xCBCB468D, 0xBEBED967, 0x39394B72, 0x4A4ADE94, 0x4C4CD498, 0x5858E8B0, 0xCFCF4A85,
735
+ 0xD0D06BBB, 0xEFEF2AC5, 0xAAAAE54F, 0xFBFB16ED, 0x4343C586, 0x4D4DD79A, 0x33335566, 0x85859411,
736
+ 0x4545CF8A, 0xF9F910E9, 0x02020604, 0x7F7F81FE, 0x5050F0A0, 0x3C3C4478, 0x9F9FBA25, 0xA8A8E34B,
737
+ 0x5151F3A2, 0xA3A3FE5D, 0x4040C080, 0x8F8F8A05, 0x9292AD3F, 0x9D9DBC21, 0x38384870, 0xF5F504F1,
738
+ 0xBCBCDF63, 0xB6B6C177, 0xDADA75AF, 0x21216342, 0x10103020, 0xFFFF1AE5, 0xF3F30EFD, 0xD2D26DBF,
739
+ 0xCDCD4C81, 0x0C0C1418, 0x13133526, 0xECEC2FC3, 0x5F5FE1BE, 0x9797A235, 0x4444CC88, 0x1717392E,
740
+ 0xC4C45793, 0xA7A7F255, 0x7E7E82FC, 0x3D3D477A, 0x6464ACC8, 0x5D5DE7BA, 0x19192B32, 0x737395E6,
741
+ 0x6060A0C0, 0x81819819, 0x4F4FD19E, 0xDCDC7FA3, 0x22226644, 0x2A2A7E54, 0x9090AB3B, 0x8888830B,
742
+ 0x4646CA8C, 0xEEEE29C7, 0xB8B8D36B, 0x14143C28, 0xDEDE79A7, 0x5E5EE2BC, 0x0B0B1D16, 0xDBDB76AD,
743
+ 0xE0E03BDB, 0x32325664, 0x3A3A4E74, 0x0A0A1E14, 0x4949DB92, 0x06060A0C, 0x24246C48, 0x5C5CE4B8,
744
+ 0xC2C25D9F, 0xD3D36EBD, 0xACACEF43, 0x6262A6C4, 0x9191A839, 0x9595A431, 0xE4E437D3, 0x79798BF2,
745
+ 0xE7E732D5, 0xC8C8438B, 0x3737596E, 0x6D6DB7DA, 0x8D8D8C01, 0xD5D564B1, 0x4E4ED29C, 0xA9A9E049,
746
+ 0x6C6CB4D8, 0x5656FAAC, 0xF4F407F3, 0xEAEA25CF, 0x6565AFCA, 0x7A7A8EF4, 0xAEAEE947, 0x08081810,
747
+ 0xBABAD56F, 0x787888F0, 0x25256F4A, 0x2E2E725C, 0x1C1C2438, 0xA6A6F157, 0xB4B4C773, 0xC6C65197,
748
+ 0xE8E823CB, 0xDDDD7CA1, 0x74749CE8, 0x1F1F213E, 0x4B4BDD96, 0xBDBDDC61, 0x8B8B860D, 0x8A8A850F,
749
+ 0x707090E0, 0x3E3E427C, 0xB5B5C471, 0x6666AACC, 0x4848D890, 0x03030506, 0xF6F601F7, 0x0E0E121C,
750
+ 0x6161A3C2, 0x35355F6A, 0x5757F9AE, 0xB9B9D069, 0x86869117, 0xC1C15899, 0x1D1D273A, 0x9E9EB927,
751
+ 0xE1E138D9, 0xF8F813EB, 0x9898B32B, 0x11113322, 0x6969BBD2, 0xD9D970A9, 0x8E8E8907, 0x9494A733,
752
+ 0x9B9BB62D, 0x1E1E223C, 0x87879215, 0xE9E920C9, 0xCECE4987, 0x5555FFAA, 0x28287850, 0xDFDF7AA5,
753
+ 0x8C8C8F03, 0xA1A1F859, 0x89898009, 0x0D0D171A, 0xBFBFDA65, 0xE6E631D7, 0x4242C684, 0x6868B8D0,
754
+ 0x4141C382, 0x9999B029, 0x2D2D775A, 0x0F0F111E, 0xB0B0CB7B, 0x5454FCA8, 0xBBBBD66D, 0x16163A2C
755
+ ));
756
+
757
+ foreach ($t3 as $t3i) {
758
+ $t0[] = (($t3i << 24) & 0xFF000000) | (($t3i >> 8) & 0x00FFFFFF);
759
+ $t1[] = (($t3i << 16) & 0xFFFF0000) | (($t3i >> 16) & 0x0000FFFF);
760
+ $t2[] = (($t3i << 8) & 0xFFFFFF00) | (($t3i >> 24) & 0x000000FF);
761
+ }
762
+
763
+ $tables = array(
764
+ // The Precomputed mixColumns tables t0 - t3
765
+ $t0,
766
+ $t1,
767
+ $t2,
768
+ $t3,
769
+ // The SubByte S-Box
770
+ array(
771
+ 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
772
+ 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
773
+ 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
774
+ 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
775
+ 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
776
+ 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
777
+ 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
778
+ 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
779
+ 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
780
+ 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
781
+ 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
782
+ 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
783
+ 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
784
+ 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
785
+ 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
786
+ 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
787
+ )
788
+ );
789
+ }
790
+ return $tables;
791
+ }
792
+
793
+ /**
794
+ * Provides the inverse mixColumns and inverse sboxes tables
795
+ *
796
+ * @see Crypt_Rijndael:_decryptBlock()
797
+ * @see Crypt_Rijndael:_setupInlineCrypt()
798
+ * @see Crypt_Rijndael:_setupKey()
799
+ * @access private
800
+ * @return array &$tables
801
+ */
802
+ function &_getInvTables()
803
+ {
804
+ static $tables;
805
+ if (empty($tables)) {
806
+ $dt3 = array_map('intval', array(
807
+ 0xF4A75051, 0x4165537E, 0x17A4C31A, 0x275E963A, 0xAB6BCB3B, 0x9D45F11F, 0xFA58ABAC, 0xE303934B,
808
+ 0x30FA5520, 0x766DF6AD, 0xCC769188, 0x024C25F5, 0xE5D7FC4F, 0x2ACBD7C5, 0x35448026, 0x62A38FB5,
809
+ 0xB15A49DE, 0xBA1B6725, 0xEA0E9845, 0xFEC0E15D, 0x2F7502C3, 0x4CF01281, 0x4697A38D, 0xD3F9C66B,
810
+ 0x8F5FE703, 0x929C9515, 0x6D7AEBBF, 0x5259DA95, 0xBE832DD4, 0x7421D358, 0xE0692949, 0xC9C8448E,
811
+ 0xC2896A75, 0x8E7978F4, 0x583E6B99, 0xB971DD27, 0xE14FB6BE, 0x88AD17F0, 0x20AC66C9, 0xCE3AB47D,
812
+ 0xDF4A1863, 0x1A3182E5, 0x51336097, 0x537F4562, 0x6477E0B1, 0x6BAE84BB, 0x81A01CFE, 0x082B94F9,
813
+ 0x48685870, 0x45FD198F, 0xDE6C8794, 0x7BF8B752, 0x73D323AB, 0x4B02E272, 0x1F8F57E3, 0x55AB2A66,
814
+ 0xEB2807B2, 0xB5C2032F, 0xC57B9A86, 0x3708A5D3, 0x2887F230, 0xBFA5B223, 0x036ABA02, 0x16825CED,
815
+ 0xCF1C2B8A, 0x79B492A7, 0x07F2F0F3, 0x69E2A14E, 0xDAF4CD65, 0x05BED506, 0x34621FD1, 0xA6FE8AC4,
816
+ 0x2E539D34, 0xF355A0A2, 0x8AE13205, 0xF6EB75A4, 0x83EC390B, 0x60EFAA40, 0x719F065E, 0x6E1051BD,
817
+ 0x218AF93E, 0xDD063D96, 0x3E05AEDD, 0xE6BD464D, 0x548DB591, 0xC45D0571, 0x06D46F04, 0x5015FF60,
818
+ 0x98FB2419, 0xBDE997D6, 0x4043CC89, 0xD99E7767, 0xE842BDB0, 0x898B8807, 0x195B38E7, 0xC8EEDB79,
819
+ 0x7C0A47A1, 0x420FE97C, 0x841EC9F8, 0x00000000, 0x80868309, 0x2BED4832, 0x1170AC1E, 0x5A724E6C,
820
+ 0x0EFFFBFD, 0x8538560F, 0xAED51E3D, 0x2D392736, 0x0FD9640A, 0x5CA62168, 0x5B54D19B, 0x362E3A24,
821
+ 0x0A67B10C, 0x57E70F93, 0xEE96D2B4, 0x9B919E1B, 0xC0C54F80, 0xDC20A261, 0x774B695A, 0x121A161C,
822
+ 0x93BA0AE2, 0xA02AE5C0, 0x22E0433C, 0x1B171D12, 0x090D0B0E, 0x8BC7ADF2, 0xB6A8B92D, 0x1EA9C814,
823
+ 0xF1198557, 0x75074CAF, 0x99DDBBEE, 0x7F60FDA3, 0x01269FF7, 0x72F5BC5C, 0x663BC544, 0xFB7E345B,
824
+ 0x4329768B, 0x23C6DCCB, 0xEDFC68B6, 0xE4F163B8, 0x31DCCAD7, 0x63851042, 0x97224013, 0xC6112084,
825
+ 0x4A247D85, 0xBB3DF8D2, 0xF93211AE, 0x29A16DC7, 0x9E2F4B1D, 0xB230F3DC, 0x8652EC0D, 0xC1E3D077,
826
+ 0xB3166C2B, 0x70B999A9, 0x9448FA11, 0xE9642247, 0xFC8CC4A8, 0xF03F1AA0, 0x7D2CD856, 0x3390EF22,
827
+ 0x494EC787, 0x38D1C1D9, 0xCAA2FE8C, 0xD40B3698, 0xF581CFA6, 0x7ADE28A5, 0xB78E26DA, 0xADBFA43F,
828
+ 0x3A9DE42C, 0x78920D50, 0x5FCC9B6A, 0x7E466254, 0x8D13C2F6, 0xD8B8E890, 0x39F75E2E, 0xC3AFF582,
829
+ 0x5D80BE9F, 0xD0937C69, 0xD52DA96F, 0x2512B3CF, 0xAC993BC8, 0x187DA710, 0x9C636EE8, 0x3BBB7BDB,
830
+ 0x267809CD, 0x5918F46E, 0x9AB701EC, 0x4F9AA883, 0x956E65E6, 0xFFE67EAA, 0xBCCF0821, 0x15E8E6EF,
831
+ 0xE79BD9BA, 0x6F36CE4A, 0x9F09D4EA, 0xB07CD629, 0xA4B2AF31, 0x3F23312A, 0xA59430C6, 0xA266C035,
832
+ 0x4EBC3774, 0x82CAA6FC, 0x90D0B0E0, 0xA7D81533, 0x04984AF1, 0xECDAF741, 0xCD500E7F, 0x91F62F17,
833
+ 0x4DD68D76, 0xEFB04D43, 0xAA4D54CC, 0x9604DFE4, 0xD1B5E39E, 0x6A881B4C, 0x2C1FB8C1, 0x65517F46,
834
+ 0x5EEA049D, 0x8C355D01, 0x877473FA, 0x0B412EFB, 0x671D5AB3, 0xDBD25292, 0x105633E9, 0xD647136D,
835
+ 0xD7618C9A, 0xA10C7A37, 0xF8148E59, 0x133C89EB, 0xA927EECE, 0x61C935B7, 0x1CE5EDE1, 0x47B13C7A,
836
+ 0xD2DF599C, 0xF2733F55, 0x14CE7918, 0xC737BF73, 0xF7CDEA53, 0xFDAA5B5F, 0x3D6F14DF, 0x44DB8678,
837
+ 0xAFF381CA, 0x68C43EB9, 0x24342C38, 0xA3405FC2, 0x1DC37216, 0xE2250CBC, 0x3C498B28, 0x0D9541FF,
838
+ 0xA8017139, 0x0CB3DE08, 0xB4E49CD8, 0x56C19064, 0xCB84617B, 0x32B670D5, 0x6C5C7448, 0xB85742D0
839
+ ));
840
+
841
+ foreach ($dt3 as $dt3i) {
842
+ $dt0[] = (($dt3i << 24) & 0xFF000000) | (($dt3i >> 8) & 0x00FFFFFF);
843
+ $dt1[] = (($dt3i << 16) & 0xFFFF0000) | (($dt3i >> 16) & 0x0000FFFF);
844
+ $dt2[] = (($dt3i << 8) & 0xFFFFFF00) | (($dt3i >> 24) & 0x000000FF);
845
+ };
846
+
847
+ $tables = array(
848
+ // The Precomputed inverse mixColumns tables dt0 - dt3
849
+ $dt0,
850
+ $dt1,
851
+ $dt2,
852
+ $dt3,
853
+ // The inverse SubByte S-Box
854
+ array(
855
+ 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
856
+ 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
857
+ 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
858
+ 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
859
+ 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
860
+ 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
861
+ 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
862
+ 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
863
+ 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
864
+ 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
865
+ 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
866
+ 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
867
+ 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
868
+ 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
869
+ 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
870
+ 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
871
+ )
872
+ );
873
+ }
874
+ return $tables;
875
+ }
876
+
877
+ /**
878
+ * Setup the performance-optimized function for de/encrypt()
879
+ *
880
+ * @see Crypt_Base::_setupInlineCrypt()
881
+ * @access private
882
+ */
883
+ function _setupInlineCrypt()
884
+ {
885
+ // Note: _setupInlineCrypt() will be called only if $this->changed === true
886
+ // So here we are'nt under the same heavy timing-stress as we are in _de/encryptBlock() or de/encrypt().
887
+ // However...the here generated function- $code, stored as php callback in $this->inline_crypt, must work as fast as even possible.
888
+
889
+ $lambda_functions =& Crypt_Rijndael::_getLambdaFunctions();
890
+
891
+ // We create max. 10 hi-optimized code for memory reason. Means: For each $key one ultra fast inline-crypt function.
892
+ // (Currently, for Crypt_Rijndael/AES, one generated $lambda_function cost on php5.5@32bit ~80kb unfreeable mem and ~130kb on php5.5@64bit)
893
+ // After that, we'll still create very fast optimized code but not the hi-ultimative code, for each $mode one.
894
+ $gen_hi_opt_code = (bool)(count($lambda_functions) < 10);
895
+
896
+ // Generation of a uniqe hash for our generated code
897
+ $code_hash = "Crypt_Rijndael, {$this->mode}, {$this->Nr}, {$this->Nb}";
898
+ if ($gen_hi_opt_code) {
899
+ $code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key);
900
+ }
901
+
902
+ if (!isset($lambda_functions[$code_hash])) {
903
+ switch (true) {
904
+ case $gen_hi_opt_code:
905
+ // The hi-optimized $lambda_functions will use the key-words hardcoded for better performance.
906
+ $w = $this->w;
907
+ $dw = $this->dw;
908
+ $init_encrypt = '';
909
+ $init_decrypt = '';
910
+ break;
911
+ default:
912
+ for ($i = 0, $cw = count($this->w); $i < $cw; ++$i) {
913
+ $w[] = '$w[' . $i . ']';
914
+ $dw[] = '$dw[' . $i . ']';
915
+ }
916
+ $init_encrypt = '$w = $self->w;';
917
+ $init_decrypt = '$dw = $self->dw;';
918
+ }
919
+
920
+ $Nr = $this->Nr;
921
+ $Nb = $this->Nb;
922
+ $c = $this->c;
923
+
924
+ // Generating encrypt code:
925
+ $init_encrypt.= '
926
+ static $tables;
927
+ if (empty($tables)) {
928
+ $tables = &$self->_getTables();
929
+ }
930
+ $t0 = $tables[0];
931
+ $t1 = $tables[1];
932
+ $t2 = $tables[2];
933
+ $t3 = $tables[3];
934
+ $sbox = $tables[4];
935
+ ';
936
+
937
+ $s = 'e';
938
+ $e = 's';
939
+ $wc = $Nb - 1;
940
+
941
+ // Preround: addRoundKey
942
+ $encrypt_block = '$in = unpack("N*", $in);'."\n";
943
+ for ($i = 0; $i < $Nb; ++$i) {
944
+ $encrypt_block .= '$s'.$i.' = $in['.($i + 1).'] ^ '.$w[++$wc].";\n";
945
+ }
946
+
947
+ // Mainrounds: shiftRows + subWord + mixColumns + addRoundKey
948
+ for ($round = 1; $round < $Nr; ++$round) {
949
+ list($s, $e) = array($e, $s);
950
+ for ($i = 0; $i < $Nb; ++$i) {
951
+ $encrypt_block.=
952
+ '$'.$e.$i.' =
953
+ $t0[($'.$s.$i .' >> 24) & 0xff] ^
954
+ $t1[($'.$s.(($i + $c[1]) % $Nb).' >> 16) & 0xff] ^
955
+ $t2[($'.$s.(($i + $c[2]) % $Nb).' >> 8) & 0xff] ^
956
+ $t3[ $'.$s.(($i + $c[3]) % $Nb).' & 0xff] ^
957
+ '.$w[++$wc].";\n";
958
+ }
959
+ }
960
+
961
+ // Finalround: subWord + shiftRows + addRoundKey
962
+ for ($i = 0; $i < $Nb; ++$i) {
963
+ $encrypt_block.=
964
+ '$'.$e.$i.' =
965
+ $sbox[ $'.$e.$i.' & 0xff] |
966
+ ($sbox[($'.$e.$i.' >> 8) & 0xff] << 8) |
967
+ ($sbox[($'.$e.$i.' >> 16) & 0xff] << 16) |
968
+ ($sbox[($'.$e.$i.' >> 24) & 0xff] << 24);'."\n";
969
+ }
970
+ $encrypt_block .= '$in = pack("N*"'."\n";
971
+ for ($i = 0; $i < $Nb; ++$i) {
972
+ $encrypt_block.= ',
973
+ ($'.$e.$i .' & '.((int)0xFF000000).') ^
974
+ ($'.$e.(($i + $c[1]) % $Nb).' & 0x00FF0000 ) ^
975
+ ($'.$e.(($i + $c[2]) % $Nb).' & 0x0000FF00 ) ^
976
+ ($'.$e.(($i + $c[3]) % $Nb).' & 0x000000FF ) ^
977
+ '.$w[$i]."\n";
978
+ }
979
+ $encrypt_block .= ');';
980
+
981
+ // Generating decrypt code:
982
+ $init_decrypt.= '
983
+ static $invtables;
984
+ if (empty($invtables)) {
985
+ $invtables = &$self->_getInvTables();
986
+ }
987
+ $dt0 = $invtables[0];
988
+ $dt1 = $invtables[1];
989
+ $dt2 = $invtables[2];
990
+ $dt3 = $invtables[3];
991
+ $isbox = $invtables[4];
992
+ ';
993
+
994
+ $s = 'e';
995
+ $e = 's';
996
+ $wc = $Nb - 1;
997
+
998
+ // Preround: addRoundKey
999
+ $decrypt_block = '$in = unpack("N*", $in);'."\n";
1000
+ for ($i = 0; $i < $Nb; ++$i) {
1001
+ $decrypt_block .= '$s'.$i.' = $in['.($i + 1).'] ^ '.$dw[++$wc].';'."\n";
1002
+ }
1003
+
1004
+ // Mainrounds: shiftRows + subWord + mixColumns + addRoundKey
1005
+ for ($round = 1; $round < $Nr; ++$round) {
1006
+ list($s, $e) = array($e, $s);
1007
+ for ($i = 0; $i < $Nb; ++$i) {
1008
+ $decrypt_block.=
1009
+ '$'.$e.$i.' =
1010
+ $dt0[($'.$s.$i .' >> 24) & 0xff] ^
1011
+ $dt1[($'.$s.(($Nb + $i - $c[1]) % $Nb).' >> 16) & 0xff] ^
1012
+ $dt2[($'.$s.(($Nb + $i - $c[2]) % $Nb).' >> 8) & 0xff] ^
1013
+ $dt3[ $'.$s.(($Nb + $i - $c[3]) % $Nb).' & 0xff] ^
1014
+ '.$dw[++$wc].";\n";
1015
+ }
1016
+ }
1017
+
1018
+ // Finalround: subWord + shiftRows + addRoundKey
1019
+ for ($i = 0; $i < $Nb; ++$i) {
1020
+ $decrypt_block.=
1021
+ '$'.$e.$i.' =
1022
+ $isbox[ $'.$e.$i.' & 0xff] |
1023
+ ($isbox[($'.$e.$i.' >> 8) & 0xff] << 8) |
1024
+ ($isbox[($'.$e.$i.' >> 16) & 0xff] << 16) |
1025
+ ($isbox[($'.$e.$i.' >> 24) & 0xff] << 24);'."\n";
1026
+ }
1027
+ $decrypt_block .= '$in = pack("N*"'."\n";
1028
+ for ($i = 0; $i < $Nb; ++$i) {
1029
+ $decrypt_block.= ',
1030
+ ($'.$e.$i. ' & '.((int)0xFF000000).') ^
1031
+ ($'.$e.(($Nb + $i - $c[1]) % $Nb).' & 0x00FF0000 ) ^
1032
+ ($'.$e.(($Nb + $i - $c[2]) % $Nb).' & 0x0000FF00 ) ^
1033
+ ($'.$e.(($Nb + $i - $c[3]) % $Nb).' & 0x000000FF ) ^
1034
+ '.$dw[$i]."\n";
1035
+ }
1036
+ $decrypt_block .= ');';
1037
+
1038
+ $lambda_functions[$code_hash] = $this->_createInlineCryptFunction(
1039
+ array(
1040
+ 'init_crypt' => '',
1041
+ 'init_encrypt' => $init_encrypt,
1042
+ 'init_decrypt' => $init_decrypt,
1043
+ 'encrypt_block' => $encrypt_block,
1044
+ 'decrypt_block' => $decrypt_block
1045
+ )
1046
+ );
1047
+ }
1048
+ $this->inline_crypt = $lambda_functions[$code_hash];
1049
+ }
1050
+ }
installer/dup-installer/classes/Crypt/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  //silent
1
+ <?php
2
  //silent
installer/dup-installer/classes/class.csrf.php CHANGED
@@ -1,178 +1,178 @@
1
- <?php
2
- defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
-
4
- class DUPX_CSRF {
5
-
6
- /**
7
- * Session var name prefix
8
- * @var string
9
- */
10
- public static $prefix = '_DUPX_CSRF';
11
-
12
- /**
13
- * Stores all CSRF values: Key as CSRF name and Val as CRF value
14
- * @var array
15
- */
16
- private static $CSRFVars;
17
-
18
- /**
19
- * Set new CSRF
20
- *
21
- * @param $key string CSRF Key
22
- * @param $key string CSRF Val
23
- *
24
- * @return Void
25
- */
26
- public static function setKeyVal($key, $val) {
27
- $CSRFVars = self::getCSRFVars();
28
- $CSRFVars[$key] = $val;
29
- self::saveCSRFVars($CSRFVars);
30
- self::$CSRFVars = false;
31
- }
32
-
33
- /**
34
- * Get CSRF value by passing CSRF key
35
- *
36
- * @param $key string CSRF key
37
- *
38
- * @return string|boolean If CSRF value set for give n Key, It returns CRF value otherise returns false
39
- */
40
- public static function getVal($key) {
41
- $CSRFVars = self::getCSRFVars();
42
- if (isset($CSRFVars[$key])) {
43
- return $CSRFVars[$key];
44
- } else {
45
- return false;
46
- }
47
- }
48
-
49
- /** Generate DUPX_CSRF value for form
50
- *
51
- * @param string $form - Form name as session key
52
- * @return string - token
53
- */
54
- public static function generate($form = NULL) {
55
- $keyName = self::getKeyName($form);
56
-
57
- $existingToken = self::getVal($keyName);
58
- if (false !== $existingToken) {
59
- $token = $existingToken;
60
- } else {
61
- $token = DUPX_CSRF::token() . DUPX_CSRF::fingerprint();
62
- }
63
-
64
- self::setKeyVal($keyName, $token);
65
- return $token;
66
- }
67
-
68
- /**
69
- * Check DUPX_CSRF value of form
70
- *
71
- * @param string $token - Token
72
- * @param string $form - Form name as session key
73
- * @return boolean
74
- */
75
- public static function check($token, $form = NULL) {
76
- $keyName = self::getKeyName($form);
77
- $CSRFVars = self::getCSRFVars();
78
- if (isset($CSRFVars[$keyName]) && $CSRFVars[$keyName] == $token) { // token OK
79
- return true;
80
- }
81
- return FALSE;
82
- }
83
-
84
- /** Generate token
85
- * @param void
86
- * @return string
87
- */
88
- protected static function token() {
89
- mt_srand((double) microtime() * 10000);
90
- $charid = strtoupper(md5(uniqid(rand(), TRUE)));
91
- return substr($charid, 0, 8) . substr($charid, 8, 4) . substr($charid, 12, 4) . substr($charid, 16, 4) . substr($charid, 20, 12);
92
- }
93
-
94
- /** Returns "digital fingerprint" of user
95
- * @param void
96
- * @return string - MD5 hashed data
97
- */
98
- protected static function fingerprint() {
99
- return strtoupper(md5(implode('|', array($_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT']))));
100
- }
101
-
102
- /**
103
- * Generate CSRF Key name
104
- *
105
- * @param string the form name for which CSRF key need to generate
106
- * @return string CSRF key
107
- */
108
- private static function getKeyName($form) {
109
- return DUPX_CSRF::$prefix . '_' . $form;
110
- }
111
-
112
- /**
113
- * Get Package hash
114
- *
115
- * @return string Package hash
116
- */
117
- private static function getPackageHash() {
118
- if (class_exists('DUPX_Bootstrap')) {
119
- return DUPX_Bootstrap::PACKAGE_HASH;
120
- } else {
121
- return $GLOBALS['PACKAGE_HASH'];
122
- }
123
- }
124
-
125
- /**
126
- * Get file path where CSRF tokens are stored in JSON encoded format
127
- *
128
- * @return string file path where CSRF token stored
129
- */
130
- private static function getFilePath() {
131
- if (class_exists('DUPX_Bootstrap')) {
132
- $dupInstallerfolderPath = dirname(__FILE__).'/dup-installer/';
133
- } else {
134
- $dupInstallerfolderPath = $GLOBALS['DUPX_INIT'].'/';
135
- }
136
- $packageHash = self::getPackageHash();
137
- $fileName = 'dup-installer-csrf__'.$packageHash.'.txt';
138
- $filePath = $dupInstallerfolderPath.$fileName;
139
- return $filePath;
140
- }
141
-
142
- /**
143
- * Get all CSRF vars in array format
144
- *
145
- * @return array Key as CSRF name and value as CSRF value
146
- */
147
- private static function getCSRFVars() {
148
- if (!isset(self::$CSRFVars) || false === self::$CSRFVars) {
149
- $filePath = self::getFilePath();
150
- if (file_exists($filePath)) {
151
- $contents = file_get_contents($filePath);
152
- if (empty($contents)) {
153
- self::$CSRFVars = array();
154
- } else {
155
- $CSRFobjs = json_decode($contents);
156
- foreach ($CSRFobjs as $key => $value) {
157
- self::$CSRFVars[$key] = $value;
158
- }
159
- }
160
- } else {
161
- self::$CSRFVars = array();
162
- }
163
- }
164
- return self::$CSRFVars;
165
- }
166
-
167
- /**
168
- * Stores all CSRF vars
169
- *
170
- * @param $CSRFVars array holds all CSRF key val
171
- * @return void
172
- */
173
- private static function saveCSRFVars($CSRFVars) {
174
- $contents = DupLiteSnapJsonU::wp_json_encode($CSRFVars);
175
- $filePath = self::getFilePath();
176
- file_put_contents($filePath, $contents);
177
- }
178
  }
1
+ <?php
2
+ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
+
4
+ class DUPX_CSRF {
5
+
6
+ /**
7
+ * Session var name prefix
8
+ * @var string
9
+ */
10
+ public static $prefix = '_DUPX_CSRF';
11
+
12
+ /**
13
+ * Stores all CSRF values: Key as CSRF name and Val as CRF value
14
+ * @var array
15
+ */
16
+ private static $CSRFVars;
17
+
18
+ /**
19
+ * Set new CSRF
20
+ *
21
+ * @param $key string CSRF Key
22
+ * @param $key string CSRF Val
23
+ *
24
+ * @return Void
25
+ */
26
+ public static function setKeyVal($key, $val) {
27
+ $CSRFVars = self::getCSRFVars();
28
+ $CSRFVars[$key] = $val;
29
+ self::saveCSRFVars($CSRFVars);
30
+ self::$CSRFVars = false;
31
+ }
32
+
33
+ /**
34
+ * Get CSRF value by passing CSRF key
35
+ *
36
+ * @param $key string CSRF key
37
+ *
38
+ * @return string|boolean If CSRF value set for give n Key, It returns CRF value otherise returns false
39
+ */
40
+ public static function getVal($key) {
41
+ $CSRFVars = self::getCSRFVars();
42
+ if (isset($CSRFVars[$key])) {
43
+ return $CSRFVars[$key];
44
+ } else {
45
+ return false;
46
+ }
47
+ }
48
+
49
+ /** Generate DUPX_CSRF value for form
50
+ *
51
+ * @param string $form - Form name as session key
52
+ * @return string - token
53
+ */
54
+ public static function generate($form = NULL) {
55
+ $keyName = self::getKeyName($form);
56
+
57
+ $existingToken = self::getVal($keyName);
58
+ if (false !== $existingToken) {
59
+ $token = $existingToken;
60
+ } else {
61
+ $token = DUPX_CSRF::token() . DUPX_CSRF::fingerprint();
62
+ }
63
+
64
+ self::setKeyVal($keyName, $token);
65
+ return $token;
66
+ }
67
+
68
+ /**
69
+ * Check DUPX_CSRF value of form
70
+ *
71
+ * @param string $token - Token
72
+ * @param string $form - Form name as session key
73
+ * @return boolean
74
+ */
75
+ public static function check($token, $form = NULL) {
76
+ $keyName = self::getKeyName($form);
77
+ $CSRFVars = self::getCSRFVars();
78
+ if (isset($CSRFVars[$keyName]) && $CSRFVars[$keyName] == $token) { // token OK
79
+ return true;
80
+ }
81
+ return FALSE;
82
+ }
83
+
84
+ /** Generate token
85
+ * @param void
86
+ * @return string
87
+ */
88
+ protected static function token() {
89
+ mt_srand((double) microtime() * 10000);
90
+ $charid = strtoupper(md5(uniqid(rand(), TRUE)));
91
+ return substr($charid, 0, 8) . substr($charid, 8, 4) . substr($charid, 12, 4) . substr($charid, 16, 4) . substr($charid, 20, 12);
92
+ }
93
+
94
+ /** Returns "digital fingerprint" of user
95
+ * @param void
96
+ * @return string - MD5 hashed data
97
+ */
98
+ protected static function fingerprint() {
99
+ return strtoupper(md5(implode('|', array($_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT']))));
100
+ }
101
+
102
+ /**
103
+ * Generate CSRF Key name
104
+ *
105
+ * @param string the form name for which CSRF key need to generate
106
+ * @return string CSRF key
107
+ */
108
+ private static function getKeyName($form) {
109
+ return DUPX_CSRF::$prefix . '_' . $form;
110
+ }
111
+
112
+ /**
113
+ * Get Package hash
114
+ *
115
+ * @return string Package hash
116
+ */
117
+ private static function getPackageHash() {
118
+ if (class_exists('DUPX_Bootstrap')) {
119
+ return DUPX_Bootstrap::PACKAGE_HASH;
120
+ } else {
121
+ return $GLOBALS['PACKAGE_HASH'];
122
+ }
123
+ }
124
+
125
+ /**
126
+ * Get file path where CSRF tokens are stored in JSON encoded format
127
+ *
128
+ * @return string file path where CSRF token stored
129
+ */
130
+ private static function getFilePath() {
131
+ if (class_exists('DUPX_Bootstrap')) {
132
+ $dupInstallerfolderPath = dirname(__FILE__).'/dup-installer/';
133
+ } else {
134
+ $dupInstallerfolderPath = $GLOBALS['DUPX_INIT'].'/';
135
+ }
136
+ $packageHash = self::getPackageHash();
137
+ $fileName = 'dup-installer-csrf__'.$packageHash.'.txt';
138
+ $filePath = $dupInstallerfolderPath.$fileName;
139
+ return $filePath;
140
+ }
141
+
142
+ /**
143
+ * Get all CSRF vars in array format
144
+ *
145
+ * @return array Key as CSRF name and value as CSRF value
146
+ */
147
+ private static function getCSRFVars() {
148
+ if (!isset(self::$CSRFVars) || false === self::$CSRFVars) {
149
+ $filePath = self::getFilePath();
150
+ if (file_exists($filePath)) {
151
+ $contents = file_get_contents($filePath);
152
+ if (empty($contents)) {
153
+ self::$CSRFVars = array();
154
+ } else {
155
+ $CSRFobjs = json_decode($contents);
156
+ foreach ($CSRFobjs as $key => $value) {
157
+ self::$CSRFVars[$key] = $value;
158
+ }
159
+ }
160
+ } else {
161
+ self::$CSRFVars = array();
162
+ }
163
+ }
164
+ return self::$CSRFVars;
165
+ }
166
+
167
+ /**
168
+ * Stores all CSRF vars
169
+ *
170
+ * @param $CSRFVars array holds all CSRF key val
171
+ * @return void
172
+ */
173
+ private static function saveCSRFVars($CSRFVars) {
174
+ $contents = DupLiteSnapJsonU::wp_json_encode($CSRFVars);
175
+ $filePath = self::getFilePath();
176
+ file_put_contents($filePath, $contents);
177
+ }
178
  }
installer/dup-installer/classes/class.package.php CHANGED
@@ -1,100 +1,100 @@
1
- <?php
2
- /**
3
- * Class used to update and edit web server configuration files
4
- * for .htaccess, web.config and user.ini
5
- *
6
- * Standard: PSR-2
7
- * @link http://www.php-fig.org/psr/psr-2 Full Documentation
8
- *
9
- */
10
- defined('ABSPATH') || defined('DUPXABSPATH') || exit;
11
-
12
- /**
13
- * Package related functions
14
- *
15
- */
16
- final class DUPX_Package
17
- {
18
-
19
- /**
20
- *
21
- * @staticvar string $path
22
- * @return string
23
- */
24
- public static function getWpconfigArkPath()
25
- {
26
- static $path = null;
27
- if (is_null($path)) {
28
- $path = $GLOBALS['DUPX_AC']->installSiteOverwriteOn ? $GLOBALS['DUPX_ROOT'].'/dup-wp-config-arc__'.$GLOBALS['DUPX_AC']->package_hash.'.txt' : $GLOBALS['DUPX_ROOT'].'/wp-config.php';
29
- }
30
- return $path;
31
- }
32
-
33
- /**
34
- *
35
- * @staticvar bool|string $packageHash
36
- * @return bool|string false if fail
37
- */
38
- public static function getPackageHash()
39
- {
40
- return $GLOBALS['DUPX_AC']->package_hash;
41
- }
42
-
43
- /**
44
- *
45
- * @staticvar string $fileHash
46
- * @return string
47
- */
48
- public static function getArchiveFileHash()
49
- {
50
- static $fileHash = null;
51
-
52
- if (is_null($fileHash)) {
53
- $fileHash = preg_replace('/^.+_([a-z0-9]+)_[0-9]{14}_archive\.(?:daf|zip)$/', '$1', $GLOBALS['FW_PACKAGE_PATH']);
54
- }
55
-
56
- return $fileHash;
57
- }
58
-
59
- /**
60
- *
61
- * @staticvar string $path
62
- * @return string
63
- */
64
- public static function getHtaccessArkPath()
65
- {
66
- static $path = null;
67
- if (is_null($path)) {
68
- $path = $GLOBALS['DUPX_ROOT'].'/.htaccess__'.$GLOBALS['DUPX_AC']->package_hash;
69
- }
70
- return $path;
71
- }
72
-
73
- /**
74
- *
75
- * @staticvar string $path
76
- * @return string
77
- */
78
- public static function getOrigWpConfigPath()
79
- {
80
- static $path = null;
81
- if (is_null($path)) {
82
- $path = $GLOBALS['DUPX_INIT'].'/dup-orig-wp-config__'.$GLOBALS['DUPX_AC']->package_hash.'.txt';
83
- }
84
- return $path;
85
- }
86
-
87
- /**
88
- *
89
- * @staticvar string $path
90
- * @return string
91
- */
92
- public static function getOrigHtaccessPath()
93
- {
94
- static $path = null;
95
- if (is_null($path)) {
96
- $path = $GLOBALS['DUPX_INIT'].'/dup-orig-wp-config__'.$GLOBALS['DUPX_AC']->package_hash.'.txt';
97
- }
98
- return $GLOBALS['DUPX_INIT'].'/dup-orig-htaccess__'.$GLOBALS['DUPX_AC']->package_hash.'.txt';
99
- }
100
  }
1
+ <?php
2
+ /**
3
+ * Class used to update and edit web server configuration files
4
+ * for .htaccess, web.config and user.ini
5
+ *
6
+ * Standard: PSR-2
7
+ * @link http://www.php-fig.org/psr/psr-2 Full Documentation
8
+ *
9
+ */
10
+ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
11
+
12
+ /**
13
+ * Package related functions
14
+ *
15
+ */
16
+ final class DUPX_Package
17
+ {
18
+
19
+ /**
20
+ *
21
+ * @staticvar string $path
22
+ * @return string
23
+ */
24
+ public static function getWpconfigArkPath()
25
+ {
26
+ static $path = null;
27
+ if (is_null($path)) {
28
+ $path = $GLOBALS['DUPX_AC']->installSiteOverwriteOn ? $GLOBALS['DUPX_ROOT'].'/dup-wp-config-arc__'.$GLOBALS['DUPX_AC']->package_hash.'.txt' : $GLOBALS['DUPX_ROOT'].'/wp-config.php';
29
+ }
30
+ return $path;
31
+ }
32
+
33
+ /**
34
+ *
35
+ * @staticvar bool|string $packageHash
36
+ * @return bool|string false if fail
37
+ */
38
+ public static function getPackageHash()
39
+ {
40
+ return $GLOBALS['DUPX_AC']->package_hash;
41
+ }
42
+
43
+ /**
44
+ *
45
+ * @staticvar string $fileHash
46
+ * @return string
47
+ */
48
+ public static function getArchiveFileHash()
49
+ {
50
+ static $fileHash = null;
51
+
52
+ if (is_null($fileHash)) {
53
+ $fileHash = preg_replace('/^.+_([a-z0-9]+)_[0-9]{14}_archive\.(?:daf|zip)$/', '$1', $GLOBALS['FW_PACKAGE_PATH']);
54
+ }
55
+
56
+ return $fileHash;
57
+ }
58
+
59
+ /**
60
+ *
61
+ * @staticvar string $path
62
+ * @return string
63
+ */
64
+ public static function getHtaccessArkPath()
65
+ {
66
+ static $path = null;
67
+ if (is_null($path)) {
68
+ $path = $GLOBALS['DUPX_ROOT'].'/.htaccess__'.$GLOBALS['DUPX_AC']->package_hash;
69
+ }
70
+ return $path;
71
+ }
72
+
73
+ /**
74
+ *
75
+ * @staticvar string $path
76
+ * @return string
77
+ */
78
+ public static function getOrigWpConfigPath()
79
+ {
80
+ static $path = null;
81
+ if (is_null($path)) {
82
+ $path = $GLOBALS['DUPX_INIT'].'/dup-orig-wp-config__'.$GLOBALS['DUPX_AC']->package_hash.'.txt';
83
+ }
84
+ return $path;
85
+ }
86
+
87
+ /**
88
+ *
89
+ * @staticvar string $path
90
+ * @return string
91
+ */
92
+ public static function getOrigHtaccessPath()
93
+ {
94
+ static $path = null;
95
+ if (is_null($path)) {
96
+ $path = $GLOBALS['DUPX_INIT'].'/dup-orig-wp-config__'.$GLOBALS['DUPX_AC']->package_hash.'.txt';
97
+ }
98
+ return $GLOBALS['DUPX_INIT'].'/dup-orig-htaccess__'.$GLOBALS['DUPX_AC']->package_hash.'.txt';
99
+ }
100
  }
installer/dup-installer/classes/config/class.boot.php CHANGED
@@ -1,104 +1,104 @@
1
- <?php
2
- /**
3
- * Boot class
4
- *
5
- * Standard: PSR-2
6
- * @link http://www.php-fig.org/psr/psr-2 Full Documentation
7
- *
8
- * @package SC\DUPX\Constants
9
- *
10
- */
11
- defined('ABSPATH') || defined('DUPXABSPATH') || exit;
12
-
13
- class DUPX_Boot
14
- {
15
-
16
- /**
17
- * inizialize all
18
- */
19
- public static function init()
20
- {
21
- self::phpIni();
22
- self::includes();
23
- }
24
-
25
- /**
26
- * init ini_set and default constants
27
- *
28
- * @throws Exception
29
- */
30
- public static function phpIni()
31
- {
32
- if (!isset($GLOBALS['DUPX_INIT'])) {
33
- throw new Exception('GLOBALS DUPX_INIT not defined.');
34
- }
35
-
36
- /** Absolute path to the Installer directory. - necessary for php protection */
37
- if (!defined('KB_IN_BYTES')) {
38
- define('KB_IN_BYTES', 1024);
39
- }
40
- if (!defined('MB_IN_BYTES')) {
41
- define('MB_IN_BYTES', 1024 * KB_IN_BYTES);
42
- }
43
- if (!defined('GB_IN_BYTES')) {
44
- define('GB_IN_BYTES', 1024 * MB_IN_BYTES);
45
- }
46
- if (!defined('DUPLICATOR_PHP_MAX_MEMORY')) {
47
- define('DUPLICATOR_PHP_MAX_MEMORY', 4096 * MB_IN_BYTES);
48
- }
49
-
50
- date_default_timezone_set('UTC'); // Some machines don’t have this set so just do it here.
51
- @ignore_user_abort(true);
52
-
53
- require_once($GLOBALS['DUPX_INIT'].'/lib/snaplib/snaplib.all.php');
54
-
55
- @set_time_limit(3600);
56
-
57
- $ini_get_default_charset = ini_get("default_charset");
58
- if (empty($ini_get_default_charset) && DupLiteSnapLibUtil::wp_is_ini_value_changeable('default_charset')) {
59
- @ini_set("default_charset", 'utf-8');
60
- }
61
- if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('memory_limit')) {
62
- @ini_set('memory_limit', DUPLICATOR_PHP_MAX_MEMORY);
63
- }
64
- if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('max_input_time')) {
65
- @ini_set('max_input_time', '-1');
66
- }
67
- if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('pcre.backtrack_limit')) {
68
- @ini_set('pcre.backtrack_limit', PHP_INT_MAX);
69
- }
70
- }
71
-
72
- /**
73
- * include default utils files and constants
74
- *
75
- * @throws Exception
76
- */
77
- public static function includes()
78
- {
79
- if (!isset($GLOBALS['DUPX_INIT'])) {
80
- throw new Exception('GLOBALS DUPX_INIT not defined.');
81
- }
82
-
83
- $GLOBALS['DUPX_ENFORCE_PHP_INI'] = false;
84
- $GLOBALS['DUPX_DEBUG'] = (isset($_GET['debug']) && $_GET['debug'] == 1) ? true : false;
85
-
86
- require_once($GLOBALS['DUPX_INIT'].'/classes/utilities/class.u.exceptions.php');
87
- require_once($GLOBALS['DUPX_INIT'].'/classes/utilities/class.u.php');
88
- require_once($GLOBALS['DUPX_INIT'].'/classes/utilities/class.u.notices.manager.php');
89
- require_once($GLOBALS['DUPX_INIT'].'/classes/utilities/class.u.html.php');
90
- require_once($GLOBALS['DUPX_INIT'].'/classes/config/class.constants.php');
91
- require_once($GLOBALS['DUPX_INIT'].'/ctrls/ctrl.base.php');
92
-
93
- DUPX_U::init();
94
- DUPX_Constants::init();
95
- }
96
-
97
- public static function initArchiveAndLog()
98
- {
99
- require_once($GLOBALS['DUPX_INIT'].'/classes/config/class.archive.config.php');
100
- $GLOBALS['DUPX_AC'] = DUPX_ArchiveConfig::getInstance();
101
- require_once($GLOBALS['DUPX_INIT'].'/classes/class.logging.php');
102
- DUPX_Log::setPostProcessCallabck(array('DUPX_CTRL', 'renderPostProcessings'));
103
- }
104
  }
1
+ <?php
2
+ /**
3
+ * Boot class
4
+ *
5
+ * Standard: PSR-2
6
+ * @link http://www.php-fig.org/psr/psr-2 Full Documentation
7
+ *
8
+ * @package SC\DUPX\Constants
9
+ *
10
+ */
11
+ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
12
+
13
+ class DUPX_Boot
14
+ {
15
+
16
+ /**
17
+ * inizialize all
18
+ */
19
+ public static function init()
20
+ {
21
+ self::phpIni();
22
+ self::includes();
23
+ }
24
+
25
+ /**
26
+ * init ini_set and default constants
27
+ *
28
+ * @throws Exception
29
+ */
30
+ public static function phpIni()
31
+ {
32
+ if (!isset($GLOBALS['DUPX_INIT'])) {
33
+ throw new Exception('GLOBALS DUPX_INIT not defined.');
34
+ }
35
+
36
+ /** Absolute path to the Installer directory. - necessary for php protection */
37
+ if (!defined('KB_IN_BYTES')) {
38
+ define('KB_IN_BYTES', 1024);
39
+ }
40
+ if (!defined('MB_IN_BYTES')) {
41
+ define('MB_IN_BYTES', 1024 * KB_IN_BYTES);
42
+ }
43
+ if (!defined('GB_IN_BYTES')) {
44
+ define('GB_IN_BYTES', 1024 * MB_IN_BYTES);
45
+ }
46
+ if (!defined('DUPLICATOR_PHP_MAX_MEMORY')) {
47
+ define('DUPLICATOR_PHP_MAX_MEMORY', 4096 * MB_IN_BYTES);
48
+ }
49
+
50
+ date_default_timezone_set('UTC'); // Some machines don’t have this set so just do it here.
51
+ @ignore_user_abort(true);
52
+
53
+ require_once($GLOBALS['DUPX_INIT'].'/lib/snaplib/snaplib.all.php');
54
+
55
+ @set_time_limit(3600);
56
+
57
+ $ini_get_default_charset = ini_get("default_charset");
58
+ if (empty($ini_get_default_charset) && DupLiteSnapLibUtil::wp_is_ini_value_changeable('default_charset')) {
59
+ @ini_set("default_charset", 'utf-8');
60
+ }
61
+ if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('memory_limit')) {
62
+ @ini_set('memory_limit', DUPLICATOR_PHP_MAX_MEMORY);
63
+ }
64
+ if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('max_input_time')) {
65
+ @ini_set('max_input_time', '-1');
66
+ }
67
+ if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('pcre.backtrack_limit')) {
68
+ @ini_set('pcre.backtrack_limit', PHP_INT_MAX);
69
+ }
70
+ }
71
+
72
+ /**
73
+ * include default utils files and constants
74
+ *
75
+ * @throws Exception
76
+ */
77
+ public static function includes()
78
+ {
79
+ if (!isset($GLOBALS['DUPX_INIT'])) {
80
+ throw new Exception('GLOBALS DUPX_INIT not defined.');
81
+ }
82
+
83
+ $GLOBALS['DUPX_ENFORCE_PHP_INI'] = false;
84
+ $GLOBALS['DUPX_DEBUG'] = (isset($_GET['debug']) && $_GET['debug'] == 1) ? true : false;
85
+
86
+ require_once($GLOBALS['DUPX_INIT'].'/classes/utilities/class.u.exceptions.php');
87
+ require_once($GLOBALS['DUPX_INIT'].'/classes/utilities/class.u.php');
88
+ require_once($GLOBALS['DUPX_INIT'].'/classes/utilities/class.u.notices.manager.php');
89
+ require_once($GLOBALS['DUPX_INIT'].'/classes/utilities/class.u.html.php');
90
+ require_once($GLOBALS['DUPX_INIT'].'/classes/config/class.constants.php');
91
+ require_once($GLOBALS['DUPX_INIT'].'/ctrls/ctrl.base.php');
92
+
93
+ DUPX_U::init();
94
+ DUPX_Constants::init();
95
+ }
96
+
97
+ public static function initArchiveAndLog()
98
+ {
99
+ require_once($GLOBALS['DUPX_INIT'].'/classes/config/class.archive.config.php');
100
+ $GLOBALS['DUPX_AC'] = DUPX_ArchiveConfig::getInstance();
101
+ require_once($GLOBALS['DUPX_INIT'].'/classes/class.logging.php');
102
+ DUPX_Log::setPostProcessCallabck(array('DUPX_CTRL', 'renderPostProcessings'));
103
+ }
104
  }
installer/dup-installer/classes/utilities/class.u.exceptions.php CHANGED
@@ -1,87 +1,87 @@
1
- <?php
2
- /**
3
- * Custom exceptions
4
- *
5
- * Standard: PSR-2
6
- * @link http://www.php-fig.org/psr/psr-2 Full Documentation
7
- *
8
- * @package SC\DUPX\U
9
- *
10
- */
11
- defined('ABSPATH') || defined('DUPXABSPATH') || exit;
12
-
13
- /**
14
- * Dup installer custom exception
15
- */
16
- class DupxException extends Exception
17
- {
18
- /**
19
- *
20
- * @var string // formatted html string
21
- */
22
- protected $longMsg = '';
23
- protected $faqLink = false;
24
-
25
- /**
26
- *
27
- * @param type $shortMsg
28
- * @param type $longMsg
29
- * @param type $faqLinkUrl
30
- * @param type $faqLinkLabel
31
- * @param type $code
32
- * @param Exception $previous
33
- */
34
- public function __construct($shortMsg, $longMsg = '', $faqLinkUrl = '', $faqLinkLabel = '', $code = 0, Exception $previous = null)
35
- {
36
- parent::__construct($shortMsg, $code, $previous);
37
- $this->longMsg = (string) $longMsg;
38
- if (!empty($faqLinkUrl)) {
39
- $this->faqLink = array(
40
- 'url' => $faqLinkUrl,
41
- 'label' => $faqLinkLabel
42
- );
43
- }
44
- }
45
-
46
- public function getLongMsg()
47
- {
48
- return $this->longMsg;
49
- }
50
-
51
- public function haveFaqLink()
52
- {
53
- return $this->faqLink !== false;
54
- }
55
-
56
- public function getFaqLinkUrl()
57
- {
58
- if ($this->haveFaqLink()) {
59
- return $this->faqLink['url'];
60
- } else {
61
- return '';
62
- }
63
- }
64
-
65
- public function getFaqLinkLabel()
66
- {
67
- if ($this->haveFaqLink()) {
68
- return $this->faqLink['label'];
69
- } else {
70
- return '';
71
- }
72
- }
73
-
74
- // custom string representation of object
75
- public function __toString()
76
- {
77
- $result = __CLASS__.": [{$this->code}]: {$this->message}";
78
- if ($this->haveFaqLink()) {
79
- $result .= "\n\tSee FAQ ".$this->faqLink['label'].': '.$this->faqLink['url'];
80
- }
81
- if (!empty($this->longMsg)) {
82
- $result .= "\n\t".strip_tags($this->longMsg);
83
- }
84
- $result .= "\n";
85
- return $result;
86
- }
87
  }
1
+ <?php
2
+ /**
3
+ * Custom exceptions
4
+ *
5
+ * Standard: PSR-2
6
+ * @link http://www.php-fig.org/psr/psr-2 Full Documentation
7
+ *
8
+ * @package SC\DUPX\U
9
+ *
10
+ */
11
+ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
12
+
13
+ /**
14
+ * Dup installer custom exception
15
+ */
16
+ class DupxException extends Exception
17
+ {
18
+ /**
19
+ *
20
+ * @var string // formatted html string
21
+ */
22
+ protected $longMsg = '';
23
+ protected $faqLink = false;
24
+
25
+ /**
26
+ *
27
+ * @param type $shortMsg
28
+ * @param type $longMsg
29
+ * @param type $faqLinkUrl
30
+ * @param type $faqLinkLabel
31
+ * @param type $code
32
+ * @param Exception $previous
33
+ */
34
+ public function __construct($shortMsg, $longMsg = '', $faqLinkUrl = '', $faqLinkLabel = '', $code = 0, Exception $previous = null)
35
+ {
36
+ parent::__construct($shortMsg, $code, $previous);
37
+ $this->longMsg = (string) $longMsg;
38
+ if (!empty($faqLinkUrl)) {
39
+ $this->faqLink = array(
40
+ 'url' => $faqLinkUrl,
41
+ 'label' => $faqLinkLabel
42
+ );
43
+ }
44
+ }
45
+
46
+ public function getLongMsg()
47
+ {
48
+ return $this->longMsg;
49
+ }
50
+
51
+ public function haveFaqLink()
52
+ {
53
+ return $this->faqLink !== false;
54
+ }
55
+
56
+ public function getFaqLinkUrl()
57
+ {
58
+ if ($this->haveFaqLink()) {
59
+ return $this->faqLink['url'];
60
+ } else {
61
+ return '';
62
+ }
63
+ }
64
+
65
+ public function getFaqLinkLabel()
66
+ {
67
+ if ($this->haveFaqLink()) {
68
+ return $this->faqLink['label'];
69
+ } else {
70
+ return '';
71
+ }
72
+ }
73
+
74
+ // custom string representation of object
75
+ public function __toString()
76
+ {
77
+ $result = __CLASS__.": [{$this->code}]: {$this->message}";
78
+ if ($this->haveFaqLink()) {
79
+ $result .= "\n\tSee FAQ ".$this->faqLink['label'].': '.$this->faqLink['url'];
80
+ }
81
+ if (!empty($this->longMsg)) {
82
+ $result .= "\n\t".strip_tags($this->longMsg);
83
+ }
84
+ $result .= "\n";
85
+ return $result;
86
+ }
87
  }
installer/dup-installer/classes/utilities/class.u.search.reaplce.manager.php CHANGED
@@ -1,611 +1,611 @@
1
- <?php
2
- /**
3
- * Search and reaplace manager
4
- *
5
- * Standard: PSR-2
6
- * @link http://www.php-fig.org/psr/psr-2 Full Documentation
7
- *
8
- * @package SC\DUPX\U
9
- *
10
- */
11
- defined('ABSPATH') || defined('DUPXABSPATH') || exit;
12
-
13
- /**
14
- * Search and replace manager
15
- * singleton class
16
- */
17
- final class DUPX_S_R_MANAGER
18
- {
19
- const GLOBAL_SCOPE_KEY = '___!GLOBAL!___!SCOPE!___';
20
-
21
- /**
22
- *
23
- * @var DUPX_S_R_MANAGER
24
- */
25
- private static $instance = null;
26
-
27
- /**
28
- * full list items not sorted
29
- * @var DUPX_S_R_ITEM[]
30
- */
31
- private $items = array();
32
-
33
- /**
34
- * items sorted by priority and scope
35
- * [
36
- * 10 => [
37
- * '___!GLOBAL!___!SCOPE!___' => [
38
- * DUPX_S_R_ITEM
39
- * DUPX_S_R_ITEM
40
- * DUPX_S_R_ITEM
41
- * ],
42
- * 'scope_one' => [
43
- * DUPX_S_R_ITEM
44
- * DUPX_S_R_ITEM
45
- * ]
46
- * ],
47
- * 20 => [
48
- * .
49
- * .
50
- * .
51
- * ]
52
- * ]
53
- *
54
- * @var array
55
- */
56
- private $prorityScopeItems = array();
57
-
58
- /**
59
- *
60
- * @return DUPX_S_R_MANAGER
61
- */
62
- public static function getInstance()
63
- {
64
- if (is_null(self::$instance)) {
65
- self::$instance = new self();
66
- }
67
-
68
- return self::$instance;
69
- }
70
-
71
- private function __construct()
72
- {
73
-
74
- }
75
-
76
- /**
77
- *
78
- * @return array
79
- */
80
- public function getArrayData()
81
- {
82
- $data = array();
83
-
84
- foreach ($this->items as $item) {
85
- $data[] = $item->toArray();
86
- }
87
-
88
- return $data;
89
- }
90
-
91
- /**
92
- *
93
- * @param array $json
94
- */
95
- public function setFromArrayData($data)
96
- {
97
-
98
- foreach ($data as $itemArray) {
99
- $new_item = DUPX_S_R_ITEM::getItemFromArray($itemArray);
100
- $this->setNewItem($new_item);
101
- }
102
- }
103
-
104
- /**
105
- *
106
- * @param string $search
107
- * @param string $replace
108
- * @param string $type // item type DUPX_S_R_ITEM::[TYPE_STRING|TYPE_URL|TYPE_URL_NORMALIZE_DOMAIN|TYPE_PATH]
109
- * @param int $prority // lower first
110
- * @param bool|string|string[] $scope // true = global scope | false = never | string signle scope | string[] scope list
111
- *
112
- * @return boolean|DUPX_S_R_ITEM // false if fail or new DUPX_S_R_ITEM
113
- */
114
- public function addItem($search, $replace, $type = DUPX_S_R_ITEM::TYPE_STRING, $prority = 10, $scope = true)
115
- {
116
- if (strlen((string) $search) == 0) {
117
- return false;
118
- }
119
-
120
- if (is_bool($scope)) {
121
- $scope = $scope ? self::GLOBAL_SCOPE_KEY : '';
122
- }
123
- DUPX_Log::info(
124
- 'ADD SEARCH AND REPLACE ITEM'."\n".
125
- 'Search:"'.$search.'" Replace:"'.$replace.'" Type:"'.$type.'" Prority:"'.$prority.'" Scope:"'.$scope, 2);
126
- $new_item = new DUPX_S_R_ITEM($search, $replace, $type, $prority, $scope);
127
-
128
- return $this->setNewItem($new_item);
129
- }
130
-
131
- /**
132
- *
133
- * @param DUPX_S_R_ITEM $new_item
134
- *
135
- * @return boolean|DUPX_S_R_ITEM // false if fail or new DUPX_S_R_ITEM
136
- */
137
- private function setNewItem($new_item)
138
- {
139
- $this->items[$new_item->getId()] = $new_item;
140
-
141
- // create priority array
142
- if (!isset($this->prorityScopeItems[$new_item->prority])) {
143
- $this->prorityScopeItems[$new_item->prority] = array();
144
-
145
- // sort by priority
146
- ksort($this->prorityScopeItems);
147
- }
148
-
149
- // create scope list
150
- foreach ($new_item->scope as $scope) {
151
- if (!isset($this->prorityScopeItems[$new_item->prority][$scope])) {
152
- $this->prorityScopeItems[$new_item->prority][$scope] = array();
153
- }
154
- $this->prorityScopeItems[$new_item->prority][$scope][] = $new_item;
155
- }
156
-
157
- return $new_item;
158
- }
159
-
160
- /**
161
- * get all search and reaple items by scpoe
162
- *
163
- * @param null|string $scope if scope is empty get only global scope
164
- * @return DUPX_S_R_ITEM[]
165
- */
166
- private function getSearchReplaceItems($scope = null, $globalScope = true)
167
- {
168
- $items_list = array();
169
- foreach ($this->prorityScopeItems as $priority => $priority_list) {
170
- // get scope list
171
- if (!empty($scope) && isset($priority_list[$scope])) {
172
- foreach ($priority_list[$scope] as $item) {
173
- $items_list[] = $item;
174
- }
175
- }
176
-
177
- // get global scope
178
- if ($globalScope && isset($priority_list[self::GLOBAL_SCOPE_KEY])) {
179
- foreach ($priority_list[self::GLOBAL_SCOPE_KEY] as $item) {
180
- $items_list[] = $item;
181
- }
182
- }
183
- }
184
-
185
- return $items_list;
186
- }
187
-
188
- /**
189
- * get replace list by scope
190
- * result
191
- * [
192
- * ['search' => ...,'replace' => ...]
193
- * ['search' => ...,'replace' => ...]
194
- * ]
195
- *
196
- * @param null|string $scope if scope is empty get only global scope
197
- * @param bool $unique_search If true it eliminates the double searches leaving the one with lower priority.
198
- *
199
- * @return array
200
- */
201
- public function getSearchReplaceList($scope = null, $unique_search = true, $globalScope = true)
202
- {
203
- DUPX_Log::info('-- SEARCH LIST -- SCOPE: '.DUPX_Log::varToString($scope), DUPX_Log::LV_DEBUG);
204
-
205
- $items_list = $this->getSearchReplaceItems($scope, $globalScope);
206
- DUPX_Log::info('-- SEARCH LIST ITEMS --'."\n".print_r($items_list, true), DUPX_Log::LV_HARD_DEBUG);
207
-
208
- if ($unique_search) {
209
- $items_list = self::uniqueSearchListItem($items_list);
210
- DUPX_Log::info('-- UNIQUE LIST ITEMS --'."\n".print_r($items_list, true), DUPX_Log::LV_HARD_DEBUG);
211
- }
212
- $result = array();
213
-
214
- foreach ($items_list as $item) {
215
- $result = array_merge($result, $item->getPairsSearchReplace());
216
- }
217
-
218
- foreach ($result as $index => $c_sr) {
219
- DUPX_Log::info(
220
- 'SEARCH'.str_pad($index + 1, 3, ' ', STR_PAD_LEFT).":".
221
- str_pad(DUPX_Log::varToString($c_sr['search'])." ", 50, '=', STR_PAD_RIGHT).
222
- "=> ".
223
- DUPX_Log::varToString($c_sr['replace']));
224
- }
225
-
226
- return $result;
227
- }
228
-
229
- /**
230
- * remove duplicated search strings.
231
- * Leave the object at lower priority
232
- *
233
- * @param DUPX_S_R_ITEM[] $list
234
- * @return boolean|DUPX_S_R_ITEM[]
235
- */
236
- private static function uniqueSearchListItem($list)
237
- {
238
- $search_strings = array();
239
- $result = array();
240
-
241
- if (!is_array($list)) {
242
- return false;
243
- }
244
-
245
- foreach ($list as $item) {
246
- if (!in_array($item->search, $search_strings)) {
247
- $result[] = $item;
248
- $search_strings[] = $item->search;
249
- }
250
- }
251
-
252
- return $result;
253
- }
254
-
255
- private function __clone()
256
- {
257
-
258
- }
259
-
260
- private function __wakeup()
261
- {
262
-
263
- }
264
- }
265
-
266
- /**
267
- * search and replace item use in manager to creat the search and replace list.
268
- */
269
- class DUPX_S_R_ITEM
270
- {
271
- private static $uniqueIdCount = 0;
272
-
273
- const TYPE_STRING = 'str';
274
- const TYPE_URL = 'url';
275
- const TYPE_URL_NORMALIZE_DOMAIN = 'urlnd';
276
- const TYPE_PATH = 'path';
277
-
278
- /**
279
- *
280
- * @var int
281
- */
282
- private $id = 0;
283
-
284
- /**
285
- *
286
- * @var int prority lower first
287
- */
288
- public $prority = 10;
289
-
290
- /**
291
- *
292
- * @var string[] scope list
293
- */
294
- public $scope = array();
295
-
296
- /**
297
- *
298
- * @var string type of string
299
- */
300
- public $type = self::TYPE_STRING;
301
-
302
- /**
303
- *
304
- * @var string search string
305
- */
306
- public $search = '';
307
-
308
- /**
309
- *
310
- * @var string replace string
311
- */
312
- public $replace = '';
313
-
314
- /**
315
- *
316
- * @param string $search
317
- * @param string $replace
318
- * @param string $type
319
- * @param int $prority
320
- * @param string|string[] $scope if empty never used
321
- */
322
- public function __construct($search, $replace, $type = DUPX_S_R_ITEM::TYPE_STRING, $prority = 10, $scope = array())
323
- {
324
- if (!is_array($scope)) {
325
- $this->scope = empty($scope) ? array() : array((string) $scope);
326
- } else {
327
- $this->scope = $scope;
328
- }
329
- $this->prority = (int) $prority;
330
- switch ($type) {
331
- case DUPX_S_R_ITEM::TYPE_URL:
332
- case DUPX_S_R_ITEM::TYPE_URL_NORMALIZE_DOMAIN:
333
- $this->search = rtrim($search, '/');
334
- $this->replace = rtrim($replace, '/');
335
- break;
336
- case DUPX_S_R_ITEM::TYPE_PATH:
337
- case DUPX_S_R_ITEM::TYPE_STRING:
338
- default:
339
- $this->search = (string) $search;
340
- $this->replace = (string) $replace;
341
- break;
342
- }
343
- $this->type = $type;
344
- $this->id = self::$uniqueIdCount;
345
- self::$uniqueIdCount ++;
346
- }
347
-
348
- public function toArray()
349
- {
350
- return array(
351
- 'id' => $this->id,
352
- 'prority' => $this->prority,
353
- 'scope' => $this->scope,
354
- 'type' => $this->type,
355
- 'search' => $this->search,
356
- 'replace' => $this->replace
357
- );
358
- }
359
-
360
- public static function getItemFromArray($array)
361
- {
362
- $result = new self($array['search'], $array['replace'], $array['type'], $array['prority'], $array['scope']);
363
- return $result;
364
- }
365
-
366
- /**
367
- * return search an replace string
368
- *
369
- * result
370
- * [
371
- * ['search' => ...,'replace' => ...]
372
- * ['search' => ...,'replace' => ...]
373
- * ]
374
- *
375
- * @return array
376
- */
377
- public function getPairsSearchReplace()
378
- {
379
- switch ($this->type) {
380
- case self::TYPE_URL:
381
- return self::searchReplaceUrl($this->search, $this->replace);
382
- case self::TYPE_URL_NORMALIZE_DOMAIN:
383
- return self::searchReplaceUrl($this->search, $this->replace, true, true);
384
- case self::TYPE_PATH:
385
- return self::searchReplacePath($this->search, $this->replace);
386
- case self::TYPE_STRING:
387
- default:
388
- return self::searchReplaceWithEncodings($this->search, $this->replace);
389
- }
390
- }
391
-
392
- /**
393
- * Get search and replace strings with encodings
394
- * prevents unnecessary substitution like when search and reaplace are the same.
395
- *
396
- * result
397
- * [
398
- * ['search' => ...,'replace' => ...]
399
- * ['search' => ...,'replace' => ...]
400
- * ]
401
- *
402
- * @param string $search
403
- * @param string $replace
404
- * @param bool $json add json encode string
405
- * @param bool $urlencode add urlencode string
406
- *
407
- * @return array pairs search and replace
408
- */
409
- public static function searchReplaceWithEncodings($search, $replace, $json = true, $urlencode = true)
410
- {
411
- $result = array();
412
- if ($search != $replace) {
413
- $result[] = array('search' => $search, 'replace' => $replace);
414
- } else {
415
- return array();
416
- }
417
-
418
- // JSON ENCODE
419
- if ($json) {
420
- $search_json = str_replace('"', "", json_encode($search));
421
- $replace_json = str_replace('"', "", json_encode($replace));
422
-
423
- if ($search != $search_json && $search_json != $replace_json) {
424
- $result[] = array('search' => $search_json, 'replace' => $replace_json);
425
- }
426
- }
427
-
428
- // URL ENCODE
429
- if ($urlencode) {
430
- $search_urlencode = urlencode($search);
431
- $replace_urlencode = urlencode($replace);
432
-
433
- if ($search != $search_urlencode && $search_urlencode != $replace_urlencode) {
434
- $result[] = array('search' => $search_urlencode, 'replace' => $replace_urlencode);
435
- }
436
- }
437
-
438
- return $result;
439
- }
440
-
441
- /**
442
- * Add replace strings to substitute old url to new url
443
- * 1) no protocol old url to no protocol new url (es. //www.hold.url => //www.new.url)
444
- * 2) wrong protocol new url to right protocol new url (es. http://www.new.url => https://www.new.url)
445
- *
446
- * result
447
- * [
448
- * ['search' => ...,'replace' => ...]
449
- * ['search' => ...,'replace' => ...]
450
- * ]
451
- *
452
- * @param string $search_url
453
- * @param string $replace_url
454
- * @param bool $force_new_protocol if true force http or https protocol (work only if replace url have http or https scheme)
455
- *
456
- * @return array
457
- */
458
- public static function searchReplaceUrl($search_url, $replace_url, $force_new_protocol = true, $normalizeWww = false)
459
- {
460
- if (($parse_search_url = parse_url($search_url)) !== false && isset($parse_search_url['scheme'])) {
461
- $search_url_raw = substr($search_url, strlen($parse_search_url['scheme']) + 1);
462
- } else {
463
- $search_url_raw = $search_url;
464
- }
465
-
466
- if (($parse_replace_url = parse_url($replace_url)) !== false && isset($parse_replace_url['scheme'])) {
467
- $replace_url_raw = substr($replace_url, strlen($parse_replace_url['scheme']) + 1);
468
- } else {
469
- $replace_url_raw = $replace_url;
470
- }
471
- //SEARCH WITH NO PROTOCOL: RAW "//"
472
- $result = self::searchReplaceWithEncodings($search_url_raw, $replace_url_raw);
473
-
474
- // NORMALIZE source www
475
- if ($normalizeWww && self::domainCanNormalized($search_url_raw)) {
476
- if (self::isWww($search_url_raw)) {
477
- $fromDomain = '//'.substr($search_url_raw , strlen('//www.'));
478
- } else {
479
- $fromDomain = '//www.'.substr($search_url_raw , strlen('//'));
480
- }
481
-
482
- // prevent double subsition for subdiv problems.
483
- if (strpos($replace_url_raw, $fromDomain) !== 0) {
484
- $result = array_merge($result, self::searchReplaceWithEncodings($fromDomain, $replace_url_raw));
485
- }
486
- }
487
-
488
- // NORMALIZE source protocol
489
- if ($force_new_protocol && $parse_replace_url !== false && isset($parse_replace_url['scheme'])) {
490
- //FORCE NEW PROTOCOL [HTTP / HTTPS]
491
- switch ($parse_replace_url['scheme']) {
492
- case 'http':
493
- $replace_url_wrong_protocol = 'https:'.$replace_url_raw;
494
- break;
495
- case 'https':
496
- $replace_url_wrong_protocol = 'http:'.$replace_url_raw;
497
- break;
498
- default:
499
- $replace_url_wrong_protocol = '';
500
- break;
501
- }
502
-
503
- if (!empty($replace_url_wrong_protocol)) {
504
- $result = array_merge($result, self::searchReplaceWithEncodings($replace_url_wrong_protocol, $replace_url));
505
- }
506
- }
507
-
508
- return $result;
509
- }
510
-
511
- /**
512
- * result
513
- * [
514
- * ['search' => ...,'replace' => ...]
515
- * ['search' => ...,'replace' => ...]
516
- * ]
517
- *
518
- * @param string $search_path
519
- * @param string $replace_path
520
- *
521
- * @return array
522
- */
523
- public static function searchReplacePath($search_path, $replace_path)
524
- {
525
- $result = self::searchReplaceWithEncodings($search_path, $replace_path);
526
-
527
- $search_path_unsetSafe = rtrim(DUPX_U::unsetSafePath($search_path), '\\');
528
- $replace_path_unsetSafe = rtrim($replace_path, '/');
529
- $result = array_merge($result, self::searchReplaceWithEncodings($search_path_unsetSafe, $replace_path_unsetSafe));
530
-
531
- return $result;
532
- }
533
-
534
- /**
535
- * get unique item id
536
- *
537
- * @return int
538
- */
539
- public function getId()
540
- {
541
- return $this->id;
542
- }
543
-
544
- /**
545
- * @param $url string The URL whichs domain you want to get
546
- * @return string The domain part of the given URL
547
- * www.myurl.co.uk => myurl.co.uk
548
- * www.google.com => google.com
549
- * my.test.myurl.co.uk => myurl.co.uk
550
- * www.myurl.localweb => myurl.localweb
551
- *
552
- */
553
- public static function getDomain($url)
554
- {
555
- $pieces = parse_url($url);
556
- $domain = isset($pieces['host']) ? $pieces['host'] : '';
557
- $regs = null;
558
- if (strpos($domain, ".") !== false) {
559
- if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
560
- return $regs['domain'];
561
- } else {
562
- $exDomain = explode('.', $domain);
563
- return implode('.', array_slice($exDomain, -2, 2));
564
- }
565
- } else {
566
- return $domain;
567
- }
568
- }
569
-
570
- public static function domainCanNormalized($url)
571
- {
572
- $pieces = parse_url($url);
573
-
574
- if (!isset($pieces['host'])) {
575
- return false;
576
- }
577
-
578
- if (strpos($pieces['host'], ".") === false) {
579
- return false;
580
- }
581
-
582
- $dLevels = explode('.', $pieces['host']);
583
- if ($dLevels[0] == 'www') {
584
- return true;
585
- }
586
-
587
- switch (count($dLevels)) {
588
- case 1:
589
- return false;
590
- case 2:
591
- return true;
592
- case 3:
593
- if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $pieces['host'], $regs)) {
594
- return $regs['domain'] == $pieces['host'];
595
- }
596
- return false;
597
- default:
598
- return false;
599
- }
600
- }
601
-
602
- public static function isWww($url)
603
- {
604
- $pieces = parse_url($url);
605
- if (!isset($pieces['host'])) {
606
- return false;
607
- } else {
608
- return strpos($pieces['host'], 'www.') === 0;
609
- }
610
- }
611
  }
1
+ <?php
2
+ /**
3
+ * Search and reaplace manager
4
+ *
5
+ * Standard: PSR-2
6
+ * @link http://www.php-fig.org/psr/psr-2 Full Documentation
7
+ *
8
+ * @package SC\DUPX\U
9
+ *
10
+ */
11
+ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
12
+
13
+ /**
14
+ * Search and replace manager
15
+ * singleton class
16
+ */
17
+ final class DUPX_S_R_MANAGER
18
+ {
19
+ const GLOBAL_SCOPE_KEY = '___!GLOBAL!___!SCOPE!___';
20
+
21
+ /**
22
+ *
23
+ * @var DUPX_S_R_MANAGER
24
+ */
25
+ private static $instance = null;
26
+
27
+ /**
28
+ * full list items not sorted
29
+ * @var DUPX_S_R_ITEM[]
30
+ */
31
+ private $items = array();
32
+
33
+ /**
34
+ * items sorted by priority and scope
35
+ * [
36
+ * 10 => [
37
+ * '___!GLOBAL!___!SCOPE!___' => [
38
+ * DUPX_S_R_ITEM
39
+ * DUPX_S_R_ITEM
40
+ * DUPX_S_R_ITEM
41
+ * ],
42
+ * 'scope_one' => [
43
+ * DUPX_S_R_ITEM
44
+ * DUPX_S_R_ITEM
45
+ * ]
46
+ * ],
47
+ * 20 => [
48
+ * .
49
+ * .
50
+ * .
51
+ * ]
52
+ * ]
53
+ *
54
+ * @var array
55
+ */
56
+ private $prorityScopeItems = array();
57
+
58
+ /**
59
+ *
60
+ * @return DUPX_S_R_MANAGER
61
+ */
62
+ public static function getInstance()
63
+ {
64
+ if (is_null(self::$instance)) {
65
+ self::$instance = new self();
66
+ }
67
+
68
+ return self::$instance;
69
+ }
70
+
71
+ private function __construct()
72
+ {
73
+
74
+ }
75
+
76
+ /**
77
+ *
78
+ * @return array
79
+ */
80
+ public function getArrayData()
81
+ {
82
+ $data = array();
83
+
84
+ foreach ($this->items as $item) {
85
+ $data[] = $item->toArray();
86
+ }
87
+
88
+ return $data;
89
+ }
90
+
91
+ /**
92
+ *
93
+ * @param array $json
94
+ */
95
+ public function setFromArrayData($data)
96
+ {
97
+
98
+ foreach ($data as $itemArray) {
99
+ $new_item = DUPX_S_R_ITEM::getItemFromArray($itemArray);
100
+ $this->setNewItem($new_item);
101
+ }
102
+ }
103
+
104
+ /**
105
+ *
106
+ * @param string $search
107
+ * @param string $replace
108
+ * @param string $type // item type DUPX_S_R_ITEM::[TYPE_STRING|TYPE_URL|TYPE_URL_NORMALIZE_DOMAIN|TYPE_PATH]
109
+ * @param int $prority // lower first
110
+ * @param bool|string|string[] $scope // true = global scope | false = never | string signle scope | string[] scope list
111
+ *
112
+ * @return boolean|DUPX_S_R_ITEM // false if fail or new DUPX_S_R_ITEM
113
+ */
114
+ public function addItem($search, $replace, $type = DUPX_S_R_ITEM::TYPE_STRING, $prority = 10, $scope = true)
115
+ {
116
+ if (strlen((string) $search) == 0) {
117
+ return false;
118
+ }
119
+
120
+ if (is_bool($scope)) {
121
+ $scope = $scope ? self::GLOBAL_SCOPE_KEY : '';
122
+ }
123
+ DUPX_Log::info(
124
+ 'ADD SEARCH AND REPLACE ITEM'."\n".
125
+ 'Search:"'.$search.'" Replace:"'.$replace.'" Type:"'.$type.'" Prority:"'.$prority.'" Scope:"'.$scope, 2);
126
+ $new_item = new DUPX_S_R_ITEM($search, $replace, $type, $prority, $scope);
127
+
128
+ return $this->setNewItem($new_item);
129
+ }
130
+
131
+ /**
132
+ *
133
+ * @param DUPX_S_R_ITEM $new_item
134
+ *
135
+ * @return boolean|DUPX_S_R_ITEM // false if fail or new DUPX_S_R_ITEM
136
+ */
137
+ private function setNewItem($new_item)
138
+ {
139
+ $this->items[$new_item->getId()] = $new_item;
140
+
141
+ // create priority array
142
+ if (!isset($this->prorityScopeItems[$new_item->prority])) {
143
+ $this->prorityScopeItems[$new_item->prority] = array();
144
+
145
+ // sort by priority
146
+ ksort($this->prorityScopeItems);
147
+ }
148
+
149
+ // create scope list
150
+ foreach ($new_item->scope as $scope) {
151
+ if (!isset($this->prorityScopeItems[$new_item->prority][$scope])) {
152
+ $this->prorityScopeItems[$new_item->prority][$scope] = array();
153
+ }
154
+ $this->prorityScopeItems[$new_item->prority][$scope][] = $new_item;
155
+ }
156
+
157
+ return $new_item;
158
+ }
159
+
160
+ /**
161
+ * get all search and reaple items by scpoe
162
+ *
163
+ * @param null|string $scope if scope is empty get only global scope
164
+ * @return DUPX_S_R_ITEM[]
165
+ */
166
+ private function getSearchReplaceItems($scope = null, $globalScope = true)
167
+ {
168
+ $items_list = array();
169
+ foreach ($this->prorityScopeItems as $priority => $priority_list) {
170
+ // get scope list
171
+ if (!empty($scope) && isset($priority_list[$scope])) {
172
+ foreach ($priority_list[$scope] as $item) {
173
+ $items_list[] = $item;
174
+ }
175
+ }
176
+
177
+ // get global scope
178
+ if ($globalScope && isset($priority_list[self::GLOBAL_SCOPE_KEY])) {
179
+ foreach ($priority_list[self::GLOBAL_SCOPE_KEY] as $item) {
180
+ $items_list[] = $item;
181
+ }
182
+ }
183
+ }
184
+
185
+ return $items_list;
186
+ }
187
+
188
+ /**
189
+ * get replace list by scope
190
+ * result
191
+ * [
192
+ * ['search' => ...,'replace' => ...]
193
+ * ['search' => ...,'replace' => ...]
194
+ * ]
195
+ *
196
+ * @param null|string $scope if scope is empty get only global scope
197
+ * @param bool $unique_search If true it eliminates the double searches leaving the one with lower priority.
198
+ *
199
+ * @return array
200
+ */
201
+ public function getSearchReplaceList($scope = null, $unique_search = true, $globalScope = true)
202
+ {
203
+ DUPX_Log::info('-- SEARCH LIST -- SCOPE: '.DUPX_Log::varToString($scope), DUPX_Log::LV_DEBUG);
204
+
205
+ $items_list = $this->getSearchReplaceItems($scope, $globalScope);
206
+ DUPX_Log::info('-- SEARCH LIST ITEMS --'."\n".print_r($items_list, true), DUPX_Log::LV_HARD_DEBUG);
207
+
208
+ if ($unique_search) {
209
+ $items_list = self::uniqueSearchListItem($items_list);
210
+ DUPX_Log::info('-- UNIQUE LIST ITEMS --'."\n".print_r($items_list, true), DUPX_Log::LV_HARD_DEBUG);
211
+ }
212
+ $result = array();
213
+
214
+ foreach ($items_list as $item) {
215
+ $result = array_merge($result, $item->getPairsSearchReplace());
216
+ }
217
+
218
+ foreach ($result as $index => $c_sr) {
219
+ DUPX_Log::info(
220
+ 'SEARCH'.str_pad($index + 1, 3, ' ', STR_PAD_LEFT).":".
221
+ str_pad(DUPX_Log::varToString($c_sr['search'])." ", 50, '=', STR_PAD_RIGHT).
222
+ "=> ".
223
+ DUPX_Log::varToString($c_sr['replace']));
224
+ }
225
+
226
+ return $result;
227
+ }
228
+
229
+ /**
230
+ * remove duplicated search strings.
231
+ * Leave the object at lower priority
232
+ *
233
+ * @param DUPX_S_R_ITEM[] $list
234
+ * @return boolean|DUPX_S_R_ITEM[]
235
+ */
236
+ private static function uniqueSearchListItem($list)
237
+ {
238
+ $search_strings = array();
239
+ $result = array();
240
+
241
+ if (!is_array($list)) {
242
+ return false;
243
+ }
244
+
245
+ foreach ($list as $item) {
246
+ if (!in_array($item->search, $search_strings)) {
247
+ $result[] = $item;
248
+ $search_strings[] = $item->search;
249
+ }
250
+ }
251
+
252
+ return $result;
253
+ }
254
+
255
+ private function __clone()
256
+ {
257
+
258
+ }
259
+
260
+ private function __wakeup()
261
+ {
262
+
263
+ }
264
+ }
265
+
266
+ /**
267
+ * search and replace item use in manager to creat the search and replace list.
268
+ */
269
+ class DUPX_S_R_ITEM
270
+ {
271
+ private static $uniqueIdCount = 0;
272
+
273
+ const TYPE_STRING = 'str';
274
+ const TYPE_URL = 'url';
275
+ const TYPE_URL_NORMALIZE_DOMAIN = 'urlnd';
276
+ const TYPE_PATH = 'path';
277
+
278
+ /**
279
+ *
280
+ * @var int
281
+ */
282
+ private $id = 0;
283
+
284
+ /**
285
+ *
286
+ * @var int prority lower first
287
+ */
288
+ public $prority = 10;
289
+
290
+ /**
291
+ *
292
+ * @var string[] scope list
293
+ */
294
+ public $scope = array();
295
+
296
+ /**
297
+ *
298
+ * @var string type of string
299
+ */
300
+ public $type = self::TYPE_STRING;
301
+
302
+ /**
303
+ *
304
+ * @var string search string
305
+ */
306
+ public $search = '';
307
+
308
+ /**
309
+ *
310
+ * @var string replace string
311
+ */
312
+ public $replace = '';
313
+
314
+ /**
315
+ *
316
+ * @param string $search
317
+ * @param string $replace
318
+ * @param string $type
319
+ * @param int $prority
320
+ * @param string|string[] $scope if empty never used
321
+ */
322
+ public function __construct($search, $replace, $type = DUPX_S_R_ITEM::TYPE_STRING, $prority = 10, $scope = array())
323
+ {
324
+ if (!is_array($scope)) {
325
+ $this->scope = empty($scope) ? array() : array((string) $scope);
326
+ } else {
327
+ $this->scope = $scope;
328
+ }
329
+ $this->prority = (int) $prority;
330
+ switch ($type) {
331
+ case DUPX_S_R_ITEM::TYPE_URL:
332
+ case DUPX_S_R_ITEM::TYPE_URL_NORMALIZE_DOMAIN:
333
+ $this->search = rtrim($search, '/');
334
+ $this->replace = rtrim($replace, '/');
335
+ break;
336
+ case DUPX_S_R_ITEM::TYPE_PATH:
337
+ case DUPX_S_R_ITEM::TYPE_STRING:
338
+ default:
339
+ $this->search = (string) $search;
340
+ $this->replace = (string) $replace;
341
+ break;
342
+ }
343
+ $this->type = $type;
344
+ $this->id = self::$uniqueIdCount;
345
+ self::$uniqueIdCount ++;
346
+ }
347
+
348
+ public function toArray()
349
+ {
350
+ return array(
351
+ 'id' => $this->id,
352
+ 'prority' => $this->prority,
353
+ 'scope' => $this->scope,
354
+ 'type' => $this->type,
355
+ 'search' => $this->search,
356
+ 'replace' => $this->replace
357
+ );
358
+ }
359
+
360
+ public static function getItemFromArray($array)
361
+ {
362
+ $result = new self($array['search'], $array['replace'], $array['type'], $array['prority'], $array['scope']);
363
+ return $result;
364
+ }
365
+
366
+ /**
367
+ * return search an replace string
368
+ *
369
+ * result
370
+ * [
371
+ * ['search' => ...,'replace' => ...]
372
+ * ['search' => ...,'replace' => ...]
373
+ * ]
374
+ *
375
+ * @return array
376
+ */
377
+ public function getPairsSearchReplace()
378
+ {
379
+ switch ($this->type) {
380
+ case self::TYPE_URL:
381
+ return self::searchReplaceUrl($this->search, $this->replace);
382
+ case self::TYPE_URL_NORMALIZE_DOMAIN:
383
+ return self::searchReplaceUrl($this->search, $this->replace, true, true);
384
+ case self::TYPE_PATH:
385
+ return self::searchReplacePath($this->search, $this->replace);
386
+ case self::TYPE_STRING:
387
+ default:
388
+ return self::searchReplaceWithEncodings($this->search, $this->replace);
389
+ }
390
+ }
391
+
392
+ /**
393
+ * Get search and replace strings with encodings
394
+ * prevents unnecessary substitution like when search and reaplace are the same.
395
+ *
396
+ * result
397
+ * [
398
+ * ['search' => ...,'replace' => ...]
399
+ * ['search' => ...,'replace' => ...]
400
+ * ]
401
+ *
402
+ * @param string $search
403
+ * @param string $replace
404
+ * @param bool $json add json encode string
405
+ * @param bool $urlencode add urlencode string
406
+ *
407
+ * @return array pairs search and replace
408
+ */
409
+ public static function searchReplaceWithEncodings($search, $replace, $json = true, $urlencode = true)
410
+ {
411
+ $result = array();
412
+ if ($search != $replace) {
413
+ $result[] = array('search' => $search, 'replace' => $replace);
414
+ } else {
415
+ return array();
416
+ }
417
+
418
+ // JSON ENCODE
419
+ if ($json) {
420
+ $search_json = str_replace('"', "", json_encode($search));
421
+ $replace_json = str_replace('"', "", json_encode($replace));
422
+
423
+ if ($search != $search_json && $search_json != $replace_json) {
424
+ $result[] = array('search' => $search_json, 'replace' => $replace_json);
425
+ }
426
+ }
427
+
428
+ // URL ENCODE
429
+ if ($urlencode) {
430
+ $search_urlencode = urlencode($search);
431
+ $replace_urlencode = urlencode($replace);
432
+
433
+ if ($search != $search_urlencode && $search_urlencode != $replace_urlencode) {
434
+ $result[] = array('search' => $search_urlencode, 'replace' => $replace_urlencode);
435
+ }
436
+ }
437
+
438
+ return $result;
439
+ }
440
+
441
+ /**
442
+ * Add replace strings to substitute old url to new url
443
+ * 1) no protocol old url to no protocol new url (es. //www.hold.url => //www.new.url)
444
+ * 2) wrong protocol new url to right protocol new url (es. http://www.new.url => https://www.new.url)
445
+ *
446
+ * result
447
+ * [
448
+ * ['search' => ...,'replace' => ...]
449
+ * ['search' => ...,'replace' => ...]
450
+ * ]
451
+ *
452
+ * @param string $search_url
453
+ * @param string $replace_url
454
+ * @param bool $force_new_protocol if true force http or https protocol (work only if replace url have http or https scheme)
455
+ *
456
+ * @return array
457
+ */
458
+ public static function searchReplaceUrl($search_url, $replace_url, $force_new_protocol = true, $normalizeWww = false)
459
+ {
460
+ if (($parse_search_url = parse_url($search_url)) !== false && isset($parse_search_url['scheme'])) {
461
+ $search_url_raw = substr($search_url, strlen($parse_search_url['scheme']) + 1);
462
+ } else {
463
+ $search_url_raw = $search_url;
464
+ }
465
+
466
+ if (($parse_replace_url = parse_url($replace_url)) !== false && isset($parse_replace_url['scheme'])) {
467
+ $replace_url_raw = substr($replace_url, strlen($parse_replace_url['scheme']) + 1);
468
+ } else {
469
+ $replace_url_raw = $replace_url;
470
+ }
471
+ //SEARCH WITH NO PROTOCOL: RAW "//"
472
+ $result = self::searchReplaceWithEncodings($search_url_raw, $replace_url_raw);
473
+
474
+ // NORMALIZE source www
475
+ if ($normalizeWww && self::domainCanNormalized($search_url_raw)) {
476
+ if (self::isWww($search_url_raw)) {
477
+ $fromDomain = '//'.substr($search_url_raw , strlen('//www.'));
478
+ } else {
479
+ $fromDomain = '//www.'.substr($search_url_raw , strlen('//'));
480
+ }
481
+
482
+ // prevent double subsition for subdiv problems.
483
+ if (strpos($replace_url_raw, $fromDomain) !== 0) {
484
+ $result = array_merge($result, self::searchReplaceWithEncodings($fromDomain, $replace_url_raw));
485
+ }
486
+ }
487
+
488
+ // NORMALIZE source protocol
489
+ if ($force_new_protocol && $parse_replace_url !== false && isset($parse_replace_url['scheme'])) {
490
+ //FORCE NEW PROTOCOL [HTTP / HTTPS]
491
+ switch ($parse_replace_url['scheme']) {
492
+ case 'http':
493
+ $replace_url_wrong_protocol = 'https:'.$replace_url_raw;
494
+ break;
495
+ case 'https':
496
+ $replace_url_wrong_protocol = 'http:'.$replace_url_raw;
497
+ break;
498
+ default:
499
+ $replace_url_wrong_protocol = '';
500
+ break;
501
+ }
502
+
503
+ if (!empty($replace_url_wrong_protocol)) {
504
+ $result = array_merge($result, self::searchReplaceWithEncodings($replace_url_wrong_protocol, $replace_url));
505
+ }
506
+ }
507
+
508
+ return $result;
509
+ }
510
+
511
+ /**
512
+ * result
513
+ * [
514
+ * ['search' => ...,'replace' => ...]
515
+ * ['search' => ...,'replace' => ...]
516
+ * ]
517
+ *
518
+ * @param string $search_path
519
+ * @param string $replace_path
520
+ *
521
+ * @return array
522
+ */
523
+ public static function searchReplacePath($search_path, $replace_path)
524
+ {
525
+ $result = self::searchReplaceWithEncodings($search_path, $replace_path);
526
+
527
+ $search_path_unsetSafe = rtrim(DUPX_U::unsetSafePath($search_path), '\\');
528
+ $replace_path_unsetSafe = rtrim($replace_path, '/');
529
+ $result = array_merge($result, self::searchReplaceWithEncodings($search_path_unsetSafe, $replace_path_unsetSafe));
530
+
531
+ return $result;
532
+ }
533
+
534
+ /**
535
+ * get unique item id
536
+ *
537
+ * @return int
538
+ */
539
+ public function getId()
540
+ {
541
+ return $this->id;
542
+ }
543
+
544
+ /**
545
+ * @param $url string The URL whichs domain you want to get
546
+ * @return string The domain part of the given URL
547
+ * www.myurl.co.uk => myurl.co.uk
548
+ * www.google.com => google.com
549
+ * my.test.myurl.co.uk => myurl.co.uk
550
+ * www.myurl.localweb => myurl.localweb
551
+ *
552
+ */
553
+ public static function getDomain($url)
554
+ {
555
+ $pieces = parse_url($url);
556
+ $domain = isset($pieces['host']) ? $pieces['host'] : '';
557
+ $regs = null;
558
+ if (strpos($domain, ".") !== false) {
559
+ if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
560
+ return $regs['domain'];
561
+ } else {
562
+ $exDomain = explode('.', $domain);
563
+ return implode('.', array_slice($exDomain, -2, 2));
564
+ }
565
+ } else {
566
+ return $domain;
567
+ }
568
+ }
569
+
570
+ public static function domainCanNormalized($url)
571
+ {
572
+ $pieces = parse_url($url);
573
+
574
+ if (!isset($pieces['host'])) {
575
+ return false;
576
+ }
577
+
578
+ if (strpos($pieces['host'], ".") === false) {
579
+ return false;
580
+ }
581
+
582
+ $dLevels = explode('.', $pieces['host']);
583
+ if ($dLevels[0] == 'www') {
584
+ return true;
585
+ }
586
+
587
+ switch (count($dLevels)) {
588
+ case 1:
589
+ return false;
590
+ case 2:
591
+ return true;
592
+ case 3:
593
+ if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $pieces['host'], $regs)) {
594
+ return $regs['domain'] == $pieces['host'];
595
+ }
596
+ return false;
597
+ default:
598
+ return false;
599
+ }
600
+ }
601
+
602
+ public static function isWww($url)
603
+ {
604
+ $pieces = parse_url($url);
605
+ if (!isset($pieces['host'])) {
606
+ return false;
607
+ } else {
608
+ return strpos($pieces['host'], 'www.') === 0;
609
+ }
610
+ }
611
  }
installer/dup-installer/favicon/browserconfig.xml CHANGED
@@ -1,9 +1,9 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <browserconfig>
3
- <msapplication>
4
- <tile>
5
- <square150x150logo src="/dup-installer/favicon/lite01_mstile-150x150.png"/>
6
- <TileColor>#00aba9</TileColor>
7
- </tile>
8
- </msapplication>
9
- </browserconfig>
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <browserconfig>
3
+ <msapplication>
4
+ <tile>
5
+ <square150x150logo src="/dup-installer/favicon/lite01_mstile-150x150.png"/>
6
+ <TileColor>#00aba9</TileColor>
7
+ </tile>
8
+ </msapplication>
9
+ </browserconfig>
installer/dup-installer/favicon/lite01_safari-pinned-tab.svg CHANGED
@@ -1,42 +1,42 @@
1
- <?xml version="1.0" standalone="no"?>
2
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
3
- "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
4
- <svg version="1.0" xmlns="http://www.w3.org/2000/svg"
5
- width="256.000000pt" height="256.000000pt" viewBox="0 0 256.000000 256.000000"
6
- preserveAspectRatio="xMidYMid meet">
7
- <metadata>
8
- Created by potrace 1.11, written by Peter Selinger 2001-2013
9
- </metadata>
10
- <g transform="translate(0.000000,256.000000) scale(0.100000,-0.100000)"
11
- fill="#000000" stroke="none">
12
- <path d="M945 2506 c-38 -11 -72 -21 -74 -23 -4 -3 -10 -69 -16 -163 -1 -30
13
- -3 -63 -4 -72 0 -9 -11 -20 -23 -24 -12 -3 -50 -24 -85 -45 -35 -22 -67 -39
14
- -72 -39 -5 0 -53 23 -107 50 -54 28 -103 50 -108 50 -6 0 -38 -28 -73 -62
15
- l-62 -61 56 -111 c43 -86 53 -113 44 -126 -6 -8 -29 -48 -52 -87 -22 -40 -46
16
- -73 -52 -74 -7 0 -23 -2 -37 -4 -14 -2 -62 -4 -108 -5 -45 -2 -85 -7 -89 -13
17
- -4 -6 -16 -46 -28 -89 -26 -90 -35 -75 94 -159 l86 -56 0 -105 1 -105 -103
18
- -68 c-113 -75 -109 -65 -77 -160 8 -22 14 -48 14 -57 0 -26 12 -29 123 -34 56
19
- -3 107 -7 114 -9 7 -2 20 28 33 78 12 45 28 103 36 128 8 25 16 56 19 68 2 12
20
- 7 31 10 42 4 11 7 57 7 102 0 286 134 547 367 719 59 43 193 106 277 130 67
21
- 19 102 23 229 22 133 -1 160 -4 238 -27 49 -15 107 -37 129 -48 l41 -21 -586
22
- -586 c-322 -322 -588 -584 -590 -582 -3 3 -8 50 -11 105 -8 110 -17 199 -20
23
- 202 -1 2 -44 -150 -95 -336 -51 -187 -99 -361 -107 -387 l-14 -48 41 39 c23
24
- 22 401 399 840 838 l799 799 -37 27 c-21 15 -69 46 -108 69 -96 57 -95 55 -96
25
- 120 0 88 -8 165 -16 172 -7 6 -75 26 -155 45 -12 2 -35 -25 -83 -98 l-68 -102
26
- -103 1 c-58 1 -106 3 -108 5 -2 2 -31 48 -65 101 -41 63 -68 96 -79 95 -9 -1
27
- -48 -10 -87 -21z"/>
28
- <path d="M1452 1307 l-833 -833 23 -20 c26 -24 154 -104 165 -104 5 0 17 -7
29
- 27 -15 20 -15 23 -31 26 -157 2 -42 6 -81 10 -88 4 -6 45 -22 91 -34 l84 -23
30
- 67 101 68 101 102 0 103 0 64 -95 c35 -52 66 -98 70 -102 8 -10 170 35 179 49
31
- 4 6 9 58 10 114 4 104 12 139 35 139 7 0 44 20 82 44 l70 43 104 -54 c57 -29
32
- 108 -53 112 -53 5 0 37 28 73 62 l64 62 -55 111 -56 112 47 76 c25 42 46 81
33
- 46 87 0 5 3 10 8 11 30 3 89 8 161 13 46 3 85 6 86 8 5 5 45 154 45 166 0 7
34
- -45 42 -100 78 l-100 67 0 102 0 102 104 69 103 68 -23 84 c-13 47 -25 87 -28
35
- 89 -2 3 -35 7 -73 9 -37 3 -89 6 -115 8 l-48 3 -19 -66 c-61 -206 -74 -269
36
- -76 -366 -4 -126 -9 -158 -47 -272 -84 -255 -290 -461 -548 -546 -100 -33
37
- -126 -38 -250 -42 -113 -5 -226 14 -338 55 -116 43 -166 -22 492 636 322 323
38
- 587 583 587 578 1 -5 2 -22 4 -39 5 -59 17 -191 20 -230 2 -22 4 -42 5 -45 1
39
- -4 73 244 85 295 11 49 25 101 70 259 45 164 58 216 53 216 -2 0 -378 -375
40
- -836 -833z"/>
41
- </g>
42
- </svg>
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
3
+ "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
4
+ <svg version="1.0" xmlns="http://www.w3.org/2000/svg"
5
+ width="256.000000pt" height="256.000000pt" viewBox="0 0 256.000000 256.000000"
6
+ preserveAspectRatio="xMidYMid meet">
7
+ <metadata>
8
+ Created by potrace 1.11, written by Peter Selinger 2001-2013
9
+ </metadata>
10
+ <g transform="translate(0.000000,256.000000) scale(0.100000,-0.100000)"
11
+ fill="#000000" stroke="none">
12
+ <path d="M945 2506 c-38 -11 -72 -21 -74 -23 -4 -3 -10 -69 -16 -163 -1 -30
13
+ -3 -63 -4 -72 0 -9 -11 -20 -23 -24 -12 -3 -50 -24 -85 -45 -35 -22 -67 -39
14
+ -72 -39 -5 0 -53 23 -107 50 -54 28 -103 50 -108 50 -6 0 -38 -28 -73 -62
15
+ l-62 -61 56 -111 c43 -86 53 -113 44 -126 -6 -8 -29 -48 -52 -87 -22 -40 -46
16
+ -73 -52 -74 -7 0 -23 -2 -37 -4 -14 -2 -62 -4 -108 -5 -45 -2 -85 -7 -89 -13
17
+ -4 -6 -16 -46 -28 -89 -26 -90 -35 -75 94 -159 l86 -56 0 -105 1 -105 -103
18
+ -68 c-113 -75 -109 -65 -77 -160 8 -22 14 -48 14 -57 0 -26 12 -29 123 -34 56
19
+ -3 107 -7 114 -9 7 -2 20 28 33 78 12 45 28 103 36 128 8 25 16 56 19 68 2 12
20
+ 7 31 10 42 4 11 7 57 7 102 0 286 134 547 367 719 59 43 193 106 277 130 67
21
+ 19 102 23 229 22 133 -1 160 -4 238 -27 49 -15 107 -37 129 -48 l41 -21 -586
22
+ -586 c-322 -322 -588 -584 -590 -582 -3 3 -8 50 -11 105 -8 110 -17 199 -20
23
+ 202 -1 2 -44 -150 -95 -336 -51 -187 -99 -361 -107 -387 l-14 -48 41 39 c23
24
+ 22 401 399 840 838 l799 799 -37 27 c-21 15 -69 46 -108 69 -96 57 -95 55 -96
25
+ 120 0 88 -8 165 -16 172 -7 6 -75 26 -155 45 -12 2 -35 -25 -83 -98 l-68 -102
26
+ -103 1 c-58 1 -106 3 -108 5 -2 2 -31 48 -65 101 -41 63 -68 96 -79 95 -9 -1
27
+ -48 -10 -87 -21z"/>
28
+ <path d="M1452 1307 l-833 -833 23 -20 c26 -24 154 -104 165 -104 5 0 17 -7
29
+ 27 -15 20 -15 23 -31 26 -157 2 -42 6 -81 10 -88 4 -6 45 -22 91 -34 l84 -23
30
+ 67 101 68 101 102 0 103 0 64 -95 c35 -52 66 -98 70 -102 8 -10 170 35 179 49
31
+ 4 6 9 58 10 114 4 104 12 139 35 139 7 0 44 20 82 44 l70 43 104 -54 c57 -29
32
+ 108 -53 112 -53 5 0 37 28 73 62 l64 62 -55 111 -56 112 47 76 c25 42 46 81
33
+ 46 87 0 5 3 10 8 11 30 3 89 8 161 13 46 3 85 6 86 8 5 5 45 154 45 166 0 7
34
+ -45 42 -100 78 l-100 67 0 102 0 102 104 69 103 68 -23 84 c-13 47 -25 87 -28
35
+ 89 -2 3 -35 7 -73 9 -37 3 -89 6 -115 8 l-48 3 -19 -66 c-61 -206 -74 -269
36
+ -76 -366 -4 -126 -9 -158 -47 -272 -84 -255 -290 -461 -548 -546 -100 -33
37
+ -126 -38 -250 -42 -113 -5 -226 14 -338 55 -116 43 -166 -22 492 636 322 323
38
+ 587 583 587 578 1 -5 2 -22 4 -39 5 -59 17 -191 20 -230 2 -22 4 -42 5 -45 1
39
+ -4 73 244 85 295 11 49 25 101 70 259 45 164 58 216 53 216 -2 0 -378 -375
40
+ -836 -833z"/>
41
+ </g>
42
+ </svg>
installer/dup-installer/favicon/site.webmanifest CHANGED
@@ -1,19 +1,19 @@
1
- {
2
- "name": "",
3
- "short_name": "",
4
- "icons": [
5
- {
6
- "src": "/dup-installer/favicon/lite01_android-chrome-192x192.png",
7
- "sizes": "192x192",
8
- "type": "image/png"
9
- },
10
- {
11
- "src": "/dup-installer/favicon/lite01_android-chrome-256x256.png",
12
- "sizes": "256x256",
13
- "type": "image/png"
14
- }
15
- ],
16
- "theme_color": "#ffffff",
17
- "background_color": "#ffffff",
18
- "display": "standalone"
19
- }
1
+ {
2
+ "name": "",
3
+ "short_name": "",
4
+ "icons": [
5
+ {
6
+ "src": "/dup-installer/favicon/lite01_android-chrome-192x192.png",
7
+ "sizes": "192x192",
8
+ "type": "image/png"
9
+ },
10
+ {
11
+ "src": "/dup-installer/favicon/lite01_android-chrome-256x256.png",
12
+ "sizes": "256x256",
13
+ "type": "image/png"
14
+ }
15
+ ],
16
+ "theme_color": "#ffffff",
17
+ "background_color": "#ffffff",
18
+ "display": "standalone"
19
+ }
installer/dup-installer/views/view.exception.php CHANGED
@@ -1,39 +1,39 @@
1
- <?php
2
- defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
- $log_link = './'.$GLOBALS["LOG_FILE_NAME"];
4
- $attr_log_link = DUPX_U::esc_attr($log_link);
5
- ?>
6
- <div class="dupx-logfile-link"><?php DUPX_View_Funcs::installerLogLink(); ?></div>
7
- <div class="hdr-main">
8
- Exception error
9
- </div><br/>
10
- <div id="ajaxerr-data">
11
- <b style="color:#B80000;">INSTALL ERROR!</b>
12
- <p>
13
- Message: <b><?php echo DUPX_U::esc_html($exceptionError->getMessage()); ?></b><br>
14
- Please see the <?php DUPX_View_Funcs::installerLogLink(); ?> file for more details.
15
- <?php
16
- if ($exceptionError instanceof DupxException) {
17
- if ($exceptionError->haveFaqLink()) {
18
- ?>
19
- <br>
20
- See FAQ: <a href="<?php echo $exceptionError->getFaqLinkUrl (); ?>" ><?php echo $exceptionError->getFaqLinkLabel(); ?></a>
21
-
22
- <?php
23
- }
24
- if (strlen($longMsg = $exceptionError->getLongMsg())) {
25
- echo '<br><br>'.$longMsg;
26
- }
27
- }
28
- ?>
29
- </p>
30
- <hr>
31
- Trace:
32
- <pre class="exception-trace"><?php
33
- echo $exceptionError->getTraceAsString();
34
- ?></pre>
35
- </div>
36
- <div style="text-align:center; margin:10px auto 0px auto">
37
- <!--<input type="button" class="default-btn" onclick="DUPX.hideErrorResult()" value="&laquo; Try Again" /><br/><br/>-->
38
- <i style='font-size:11px'>See online help for more details at <a href='https://snapcreek.com/ticket' target='_blank'>snapcreek.com</a></i>
39
- </div>
1
+ <?php
2
+ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
+ $log_link = './'.$GLOBALS["LOG_FILE_NAME"];
4
+ $attr_log_link = DUPX_U::esc_attr($log_link);
5
+ ?>
6
+ <div class="dupx-logfile-link"><?php DUPX_View_Funcs::installerLogLink(); ?></div>
7
+ <div class="hdr-main">
8
+ Exception error
9
+ </div><br/>
10
+ <div id="ajaxerr-data">
11
+ <b style="color:#B80000;">INSTALL ERROR!</b>
12
+ <p>
13
+ Message: <b><?php echo DUPX_U::esc_html($exceptionError->getMessage()); ?></b><br>
14
+ Please see the <?php DUPX_View_Funcs::installerLogLink(); ?> file for more details.
15
+ <?php
16
+ if ($exceptionError instanceof DupxException) {
17
+ if ($exceptionError->haveFaqLink()) {
18
+ ?>
19
+ <br>
20
+ See FAQ: <a href="<?php echo $exceptionError->getFaqLinkUrl (); ?>" ><?php echo $exceptionError->getFaqLinkLabel(); ?></a>
21
+
22
+ <?php
23
+ }
24
+ if (strlen($longMsg = $exceptionError->getLongMsg())) {
25
+ echo '<br><br>'.$longMsg;
26
+ }
27
+ }
28
+ ?>
29
+ </p>
30
+ <hr>
31
+ Trace:
32
+ <pre class="exception-trace"><?php
33
+ echo $exceptionError->getTraceAsString();
34
+ ?></pre>
35
+ </div>
36
+ <div style="text-align:center; margin:10px auto 0px auto">
37
+ <!--<input type="button" class="default-btn" onclick="DUPX.hideErrorResult()" value="&laquo; Try Again" /><br/><br/>-->
38
+ <i style='font-size:11px'>See online help for more details at <a href='https://snapcreek.com/ticket' target='_blank'>snapcreek.com</a></i>
39
+ </div>
languages/duplicator-en_US.po CHANGED
@@ -1,3856 +1,3856 @@
1
- # Copyright (C) 2019 Snap Creek
2
- # This file is distributed under the same license as the Duplicator plugin.
3
- msgid ""
4
- msgstr ""
5
- "Project-Id-Version: Duplicator 1.3.7\n"
6
- "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/duplicator\n"
7
- "Language-Team: \n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=UTF-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "POT-Creation-Date: 2019-09-02 12:30+0530\n"
12
- "PO-Revision-Date: 2019-09-02 12:45+0530\n"
13
- "X-Generator: Poedit 2.2.3\n"
14
- "X-Poedit-KeywordsList: __;_e;esc_html_e;esc_html__;_x;_ex;esc_attr_e;"
15
- "esc_attr__\n"
16
- "X-Poedit-Basepath: ..\n"
17
- "Last-Translator: \n"
18
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
19
- "Language: en_US\n"
20
- "X-Poedit-SearchPath-0: .\n"
21
-
22
- #: classes/class.logging.php:141
23
- msgid "No Log"
24
- msgstr ""
25
-
26
- #: classes/class.server.php:207
27
- msgid "(directory)"
28
- msgstr ""
29
-
30
- #: classes/package/class.pack.database.php:663
31
- msgid "Please contact your DataBase administrator to fix the error."
32
- msgstr ""
33
-
34
- #: classes/package/class.pack.installer.php:90
35
- msgid "Error reading DupArchive mini expander"
36
- msgstr ""
37
-
38
- #: classes/package/class.pack.installer.php:103
39
- msgid "Error writing installer contents"
40
- msgstr ""
41
-
42
- #: classes/package/class.pack.php:309
43
- msgid "Package name can't be empty"
44
- msgstr ""
45
-
46
- #: classes/package/class.pack.php:315
47
- #, php-format
48
- msgid "Directories: <b>%1$s</b> isn't a valid path"
49
- msgstr ""
50
-
51
- #: classes/package/class.pack.php:321
52
- #, php-format
53
- msgid "File extension: <b>%1$s</b> isn't a valid extension"
54
- msgstr ""
55
-
56
- #: classes/package/class.pack.php:327
57
- #, php-format
58
- msgid "Files: <b>%1$s</b> isn't a valid file name"
59
- msgstr ""
60
-
61
- #: classes/package/class.pack.php:335
62
- #, php-format
63
- msgid "MySQL Server Host: <b>%1$s</b> isn't a valid host"
64
- msgstr ""
65
-
66
- #: classes/package/class.pack.php:346
67
- #, php-format
68
- msgid "MySQL Server Port: <b>%1$s</b> isn't a valid port"
69
- msgstr ""
70
-
71
- #: classes/package/class.pack.php:845
72
- #, php-format
73
- msgid ""
74
- "Can't find Scanfile %s. Please ensure there no non-English characters in the "
75
- "package or schedule name."
76
- msgstr ""
77
-
78
- #: classes/package/class.pack.php:868
79
- #, php-format
80
- msgid "EXPECTED FILE/DIRECTORY COUNT: %1$s"
81
- msgstr ""
82
-
83
- #: classes/package/class.pack.php:869
84
- #, php-format
85
- msgid "ACTUAL FILE/DIRECTORY COUNT: %1$s"
86
- msgstr ""
87
-
88
- #: classes/package/class.pack.php:913
89
- #, php-format
90
- msgid "ERROR: Cannot open created archive. Error code = %1$s"
91
- msgstr ""
92
-
93
- #: classes/package/class.pack.php:918
94
- msgid "ERROR: Archive is not valid zip archive."
95
- msgstr ""
96
-
97
- #: classes/package/class.pack.php:922
98
- msgid "ERROR: Archive doesn't pass consistency check."
99
- msgstr ""
100
-
101
- #: classes/package/class.pack.php:927
102
- msgid "ERROR: Archive checksum is bad."
103
- msgstr ""
104
-
105
- #: classes/package/class.pack.php:938
106
- msgid "ARCHIVE CONSISTENCY TEST: Pass"
107
- msgstr ""
108
-
109
- #: classes/package/duparchive/class.pack.archive.duparchive.php:44
110
- msgid ""
111
- "Package build appears stuck so marking package as failed. Is the Max Worker "
112
- "Time set too high?."
113
- msgstr ""
114
-
115
- #: classes/package/duparchive/class.pack.archive.duparchive.php:45
116
- msgid "Build Failure"
117
- msgstr ""
118
-
119
- #: classes/package/duparchive/class.pack.archive.duparchive.php:83
120
- msgid "Click on \"Resolve This\" button to fix the JSON settings."
121
- msgstr ""
122
-
123
- #: classes/package/duparchive/class.pack.archive.duparchive.php:95
124
- #, php-format
125
- msgid ""
126
- "ERROR: Can't find Scanfile %s. Please ensure there no non-English characters "
127
- "in the package or schedule name."
128
- msgstr ""
129
-
130
- #: classes/package/duparchive/class.pack.archive.duparchive.php:214
131
- msgid "Problem adding items to archive."
132
- msgstr ""
133
-
134
- #: classes/package/duparchive/class.pack.archive.duparchive.php:216
135
- msgid "Problems adding items to archive."
136
- msgstr ""
137
-
138
- #: classes/package/duparchive/class.pack.archive.duparchive.php:314
139
- msgid "Critical failure present in validation"
140
- msgstr ""
141
-
142
- #: classes/ui/class.ui.dialog.php:95
143
- msgid "Processing please wait..."
144
- msgstr ""
145
-
146
- #: classes/ui/class.ui.dialog.php:98
147
- msgid "OK"
148
- msgstr ""
149
-
150
- #: classes/ui/class.ui.dialog.php:99 deactivation.php:135
151
- msgid "Cancel"
152
- msgstr ""
153
-
154
- #: classes/ui/class.ui.notice.php:47
155
- msgid "Safe Mode:"
156
- msgstr ""
157
-
158
- #: classes/ui/class.ui.notice.php:48
159
- msgid ""
160
- "During the install safe mode was enabled deactivating all plugins.<br/> "
161
- "Please be sure to "
162
- msgstr ""
163
-
164
- #: classes/ui/class.ui.notice.php:49
165
- msgid "re-activate the plugins"
166
- msgstr ""
167
-
168
- #: classes/ui/class.ui.notice.php:56
169
- #: views/tools/diagnostics/information.php:158
170
- msgid "This site has been successfully migrated!"
171
- msgstr ""
172
-
173
- #: classes/ui/class.ui.notice.php:57
174
- msgid "Final step(s):"
175
- msgstr ""
176
-
177
- #: classes/ui/class.ui.notice.php:58
178
- msgid ""
179
- "This message will be removed after all installer files are removed. "
180
- "Installer files must be removed to maintain a secure site. Click the link "
181
- "above or button below to remove all installer files and complete the "
182
- "migration."
183
- msgstr ""
184
-
185
- #: classes/ui/class.ui.notice.php:62
186
- msgid "Remove Installation Files Now!"
187
- msgstr ""
188
-
189
- #: classes/ui/class.ui.notice.php:63
190
- msgid "Optionally, Review Duplicator at WordPress.org..."
191
- msgstr ""
192
-
193
- #: classes/ui/class.ui.notice.php:69
194
- msgid "Migration Almost Complete!"
195
- msgstr ""
196
-
197
- #: classes/ui/class.ui.notice.php:70
198
- msgid ""
199
- "Reserved Duplicator installation files have been detected in the root "
200
- "directory. Please delete these installation files to avoid security issues. "
201
- "<br/> Go to:Duplicator > Tools > Information >Stored Data and click the "
202
- "\"Remove Installation Files\" button"
203
- msgstr ""
204
-
205
- #: classes/ui/class.ui.notice.php:76
206
- msgid "Take me there now!"
207
- msgstr ""
208
-
209
- #: classes/ui/class.ui.notice.php:91
210
- msgid "Redirecting Please Wait..."
211
- msgstr ""
212
-
213
- #: classes/ui/class.ui.notice.php:94
214
- msgid "Invalid token permissions to perform this request."
215
- msgstr ""
216
-
217
- #: classes/ui/class.ui.notice.php:117
218
- #, php-format
219
- msgid "Activate %s"
220
- msgstr ""
221
-
222
- #: classes/ui/class.ui.screen.base.php:44
223
- msgid "<b>Need Help?</b> Please check out these resources first:<ul>"
224
- msgstr ""
225
-
226
- #: classes/ui/class.ui.screen.base.php:52 views/settings/gopro.php:218
227
- #: views/tools/diagnostics/main.php:45
228
- msgid "Support"
229
- msgstr ""
230
-
231
- #: classes/ui/class.ui.screen.base.php:65
232
- msgid "Resources"
233
- msgstr ""
234
-
235
- #: classes/ui/class.ui.screen.base.php:66
236
- msgid "Knowledge Base"
237
- msgstr ""
238
-
239
- #: classes/ui/class.ui.screen.base.php:67
240
- msgid "Full User Guide"
241
- msgstr ""
242
-
243
- #: classes/ui/class.ui.screen.base.php:68
244
- msgid "Technical FAQs"
245
- msgstr ""
246
-
247
- #: classes/ui/class.ui.screen.base.php:69
248
- msgid "Package Settings"
249
- msgstr ""
250
-
251
- #: classes/utilities/class.u.php:64
252
- msgid "32-bit"
253
- msgstr ""
254
-
255
- #: classes/utilities/class.u.php:67
256
- msgid "64-bit"
257
- msgstr ""
258
-
259
- #: classes/utilities/class.u.php:70
260
- msgid "Unknown"
261
- msgstr ""
262
-
263
- #: classes/utilities/class.u.php:496
264
- msgid "You do not have sufficient permissions to access this page."
265
- msgstr ""
266
-
267
- #: ctrls/ctrl.package.php:175
268
- msgid "Error building DupArchive package"
269
- msgstr ""
270
-
271
- #: ctrls/ctrl.package.php:303
272
- msgid ""
273
- "An unathorized security request was made to this page. Please try again!"
274
- msgstr ""
275
-
276
- #: ctrls/ctrl.package.php:325
277
- msgid "Active package object error"
278
- msgstr ""
279
-
280
- #: ctrls/ctrl.package.php:488 ctrls/ctrl.package.php:506
281
- msgid "Couldn't find a local copy of the file requested."
282
- msgstr ""
283
-
284
- #: deactivation.php:48
285
- msgid "Need help? We are ready to answer your questions."
286
- msgstr ""
287
-
288
- #: deactivation.php:48
289
- msgid "Contact Support"
290
- msgstr ""
291
-
292
- #: deactivation.php:53
293
- msgid "It's not working on my server."
294
- msgstr ""
295
-
296
- #: deactivation.php:55
297
- msgid "Kindly share what didn't work so we can fix it in future updates..."
298
- msgstr ""
299
-
300
- #: deactivation.php:60
301
- msgid "It's too confusing to understand."
302
- msgstr ""
303
-
304
- #: deactivation.php:62
305
- msgid "Please tell us what is not clear so that we can improve it."
306
- msgstr ""
307
-
308
- #: deactivation.php:67
309
- msgid "I found a different plugin that I like better."
310
- msgstr ""
311
-
312
- #: deactivation.php:69
313
- msgid "What's the plugin name?"
314
- msgstr ""
315
-
316
- #: deactivation.php:73
317
- msgid "It does not do what I need."
318
- msgstr ""
319
-
320
- #: deactivation.php:75
321
- msgid "What does it need to do?"
322
- msgstr ""
323
-
324
- #: deactivation.php:79
325
- msgid "It's a temporary deactivation, I use the plugin all the time."
326
- msgstr ""
327
-
328
- #: deactivation.php:85
329
- #, php-format
330
- msgid "I'm switching over to the %s"
331
- msgstr ""
332
-
333
- #: deactivation.php:85
334
- msgid "Pro version"
335
- msgstr ""
336
-
337
- #: deactivation.php:128
338
- msgid "Quick Feedback"
339
- msgstr ""
340
-
341
- #: deactivation.php:129
342
- msgid "If you have a moment, please let us know why you are deactivating"
343
- msgstr ""
344
-
345
- #: deactivation.php:136 deactivation.php:344
346
- msgid "Skip & Deactivate"
347
- msgstr ""
348
-
349
- #: deactivation.php:137
350
- msgid "Send & Deactivate"
351
- msgstr ""
352
-
353
- #: deactivation.php:140
354
- msgid "Your response is sent anonymously."
355
- msgstr ""
356
-
357
- #: deactivation.php:235 deactivation.php:236
358
- msgid "Processing"
359
- msgstr ""
360
-
361
- #: deactivation.php:283
362
- msgid "Please tell us the reason so we can improve it."
363
- msgstr ""
364
-
365
- #: duplicator.php:398 views/packages/details/controller.php:48
366
- #: views/packages/main/packages.php:88 views/packages/main/s1.setup1.php:72
367
- #: views/packages/main/s2.scan1.php:185 views/packages/main/s3.build.php:90
368
- #: views/settings/controller.php:23
369
- msgid "Packages"
370
- msgstr ""
371
-
372
- #: duplicator.php:404 views/tools/controller.php:19
373
- msgid "Tools"
374
- msgstr ""
375
-
376
- #: duplicator.php:409 views/packages/main/packages.php:85
377
- #: views/settings/controller.php:19 views/settings/general.php:179
378
- msgid "Settings"
379
- msgstr ""
380
-
381
- #: duplicator.php:413
382
- msgid "Go Pro!"
383
- msgstr ""
384
-
385
- #: duplicator.php:481 views/settings/license.php:8
386
- msgid "Manage"
387
- msgstr ""
388
-
389
- #: duplicator.php:498 views/packages/main/packages.php:82
390
- msgid "Get Help"
391
- msgstr ""
392
-
393
- #: duplicator.php:498
394
- msgid "Go Pro"
395
- msgstr ""
396
-
397
- #: views/packages/details/controller.php:13
398
- msgid "package log"
399
- msgstr ""
400
-
401
- #: views/packages/details/controller.php:14
402
- msgid "FAQ"
403
- msgstr ""
404
-
405
- #: views/packages/details/controller.php:15
406
- msgid "resources page"
407
- msgstr ""
408
-
409
- #: views/packages/details/controller.php:34
410
- msgid "This package contains an error. Please review the "
411
- msgstr ""
412
-
413
- #: views/packages/details/controller.php:34
414
- msgid " for details."
415
- msgstr ""
416
-
417
- #: views/packages/details/controller.php:35
418
- msgid "For help visit the "
419
- msgstr ""
420
-
421
- #: views/packages/details/controller.php:35
422
- msgid " and "
423
- msgstr ""
424
-
425
- #: views/packages/details/controller.php:42
426
- msgid "Details"
427
- msgstr ""
428
-
429
- #: views/packages/details/controller.php:45
430
- msgid "Transfer"
431
- msgstr ""
432
-
433
- #: views/packages/details/detail.php:63
434
- msgid "Invalid Package ID request. Please try again!"
435
- msgstr ""
436
-
437
- #: views/packages/details/detail.php:75 views/settings/controller.php:22
438
- #: views/tools/diagnostics/inc.settings.php:29
439
- msgid "General"
440
- msgstr ""
441
-
442
- #: views/packages/details/detail.php:81 views/packages/details/detail.php:184
443
- #: views/packages/main/packages.php:138 views/packages/main/s1.setup2.php:73
444
- #: views/packages/main/s1.setup2.php:99 views/packages/main/s2.scan3.php:529
445
- #: views/packages/main/s3.build.php:133
446
- msgid "Name"
447
- msgstr ""
448
-
449
- #: views/packages/details/detail.php:85
450
- msgid "ID"
451
- msgstr ""
452
-
453
- #: views/packages/details/detail.php:86
454
- msgid "Hash"
455
- msgstr ""
456
-
457
- #: views/packages/details/detail.php:87
458
- msgid "Full Name"
459
- msgstr ""
460
-
461
- #: views/packages/details/detail.php:92 views/packages/main/s1.setup2.php:82
462
- #: views/packages/main/s2.scan3.php:530
463
- msgid "Notes"
464
- msgstr ""
465
-
466
- #: views/packages/details/detail.php:93
467
- msgid "- no notes -"
468
- msgstr ""
469
-
470
- #: views/packages/details/detail.php:96
471
- msgid "Versions"
472
- msgstr ""
473
-
474
- #: views/packages/details/detail.php:100 views/packages/main/s2.scan2.php:106
475
- msgid "WordPress"
476
- msgstr ""
477
-
478
- #: views/packages/details/detail.php:100 views/packages/details/detail.php:101
479
- #: views/packages/details/detail.php:103 views/packages/details/detail.php:104
480
- #: views/packages/details/detail.php:118
481
- msgid "- unknown -"
482
- msgstr ""
483
-
484
- #: views/packages/details/detail.php:101
485
- msgid "PHP"
486
- msgstr ""
487
-
488
- #: views/packages/details/detail.php:102
489
- msgid "Mysql"
490
- msgstr ""
491
-
492
- #: views/packages/details/detail.php:109
493
- msgid "Runtime"
494
- msgstr ""
495
-
496
- #: views/packages/details/detail.php:110
497
- msgid "error running"
498
- msgstr ""
499
-
500
- #: views/packages/details/detail.php:113
501
- msgid "Status"
502
- msgstr ""
503
-
504
- #: views/packages/details/detail.php:114
505
- msgid "completed"
506
- msgstr ""
507
-
508
- #: views/packages/details/detail.php:114
509
- msgid "in-complete"
510
- msgstr ""
511
-
512
- #: views/packages/details/detail.php:117 views/packages/details/detail.php:366
513
- #: views/packages/main/s1.setup2.php:472
514
- #: views/tools/diagnostics/inc.settings.php:118
515
- msgid "User"
516
- msgstr ""
517
-
518
- #: views/packages/details/detail.php:121 views/packages/details/detail.php:269
519
- #: views/packages/main/s1.setup2.php:158 views/packages/main/s2.scan3.php:28
520
- #: views/packages/main/s2.scan3.php:586 views/packages/main/s2.scan3.php:638
521
- msgid "Files"
522
- msgstr ""
523
-
524
- #: views/packages/details/detail.php:129
525
- msgid "Log"
526
- msgstr ""
527
-
528
- #: views/packages/details/detail.php:130
529
- msgid "Share"
530
- msgstr ""
531
-
532
- #: views/packages/details/detail.php:138 views/packages/details/detail.php:226
533
- #: views/packages/main/packages.php:208 views/packages/main/s1.setup2.php:142
534
- #: views/packages/main/s2.scan3.php:21 views/packages/main/s3.build.php:146
535
- #: views/settings/packages.php:204
536
- msgid "Archive"
537
- msgstr ""
538
-
539
- #: views/packages/details/detail.php:142 views/packages/details/detail.php:325
540
- #: views/packages/main/packages.php:205 views/packages/main/s1.setup2.php:381
541
- #: views/packages/main/s3.build.php:143
542
- msgid "Installer"
543
- msgstr ""
544
-
545
- #: views/packages/details/detail.php:146 views/packages/details/detail.php:362
546
- #: views/packages/main/s1.setup2.php:159 views/packages/main/s1.setup2.php:468
547
- #: views/packages/main/s2.scan3.php:365 views/packages/main/s2.scan3.php:535
548
- #: views/settings/packages.php:70
549
- msgid "Database"
550
- msgstr ""
551
-
552
- #: views/packages/details/detail.php:160
553
- msgid "Download Links"
554
- msgstr ""
555
-
556
- #: views/packages/details/detail.php:163
557
- msgid "The following links contain sensitive data. Please share with caution!"
558
- msgstr ""
559
-
560
- #: views/packages/details/detail.php:169
561
- msgid ""
562
- "The database SQL script is a quick link to your database backup script. An "
563
- "exact copy is also stored in the package."
564
- msgstr ""
565
-
566
- #: views/packages/details/detail.php:177 views/packages/main/s1.setup2.php:92
567
- #: views/settings/controller.php:25 views/settings/general.php:110
568
- msgid "Storage"
569
- msgstr ""
570
-
571
- #: views/packages/details/detail.php:185 views/packages/details/detail.php:286
572
- #: views/packages/main/s1.setup2.php:100 views/settings/license.php:12
573
- msgid "Type"
574
- msgstr ""
575
-
576
- #: views/packages/details/detail.php:186 views/packages/main/s1.setup2.php:101
577
- msgid "Location"
578
- msgstr ""
579
-
580
- #: views/packages/details/detail.php:191 views/packages/main/s1.setup2.php:106
581
- msgid "Default"
582
- msgstr ""
583
-
584
- #: views/packages/details/detail.php:192 views/packages/main/s1.setup2.php:107
585
- msgid "Local"
586
- msgstr ""
587
-
588
- #: views/packages/details/detail.php:203 views/packages/main/s1.setup2.php:119
589
- #, php-format
590
- msgid "%1$s, %2$s, %3$s, %4$s, %5$s and other storage options available in"
591
- msgstr ""
592
-
593
- #: views/packages/details/detail.php:204 views/packages/main/s1.setup2.php:120
594
- #: views/packages/main/s2.scan3.php:485 views/packages/main/s2.scan3.php:497
595
- #: views/packages/main/s3.build.php:21
596
- msgid "Duplicator Pro"
597
- msgstr ""
598
-
599
- #: views/packages/details/detail.php:206 views/packages/main/s1.setup2.php:122
600
- msgid "Additional Storage:"
601
- msgstr ""
602
-
603
- #: views/packages/details/detail.php:207 views/packages/main/s1.setup2.php:123
604
- msgid ""
605
- "Duplicator Pro allows you to create a package and then store it at a custom "
606
- "location on this server or to a cloud based location such as Google Drive, "
607
- "Amazon, Dropbox or FTP."
608
- msgstr ""
609
-
610
- #: views/packages/details/detail.php:234 views/packages/details/detail.php:290
611
- #: views/packages/main/s1.setup2.php:260
612
- msgid "Build Mode"
613
- msgstr ""
614
-
615
- #: views/packages/details/detail.php:241
616
- msgid "Database Mode"
617
- msgstr ""
618
-
619
- #: views/packages/details/detail.php:242
620
- msgid "Archive Database Only Enabled"
621
- msgstr ""
622
-
623
- #: views/packages/details/detail.php:246 views/packages/details/detail.php:303
624
- msgid "Filters"
625
- msgstr ""
626
-
627
- #: views/packages/details/detail.php:250 views/packages/main/s2.scan3.php:564
628
- #: views/packages/main/s2.scan3.php:629
629
- msgid "Directories"
630
- msgstr ""
631
-
632
- #: views/packages/details/detail.php:254 views/packages/details/detail.php:264
633
- #: views/packages/details/detail.php:273 views/packages/details/detail.php:312
634
- msgid "- no filters -"
635
- msgstr ""
636
-
637
- #: views/packages/details/detail.php:260 views/packages/main/s2.scan3.php:575
638
- msgid "Extensions"
639
- msgstr ""
640
-
641
- #: views/packages/details/detail.php:283 views/packages/details/detail.php:395
642
- msgid "DATABASE"
643
- msgstr ""
644
-
645
- #: views/packages/details/detail.php:296 views/packages/main/s2.scan3.php:546
646
- msgid "MySQL Compatibility Mode Enabled"
647
- msgstr ""
648
-
649
- #: views/packages/details/detail.php:297 views/packages/main/s1.setup2.php:336
650
- #: views/packages/main/s2.scan2.php:76 views/packages/main/s2.scan2.php:87
651
- #: views/packages/main/s2.scan2.php:94 views/packages/main/s2.scan3.php:547
652
- msgid "details"
653
- msgstr ""
654
-
655
- #: views/packages/details/detail.php:307 views/packages/main/s2.scan3.php:393
656
- msgid "Tables"
657
- msgstr ""
658
-
659
- #: views/packages/details/detail.php:332
660
- msgid " Security"
661
- msgstr ""
662
-
663
- #: views/packages/details/detail.php:336
664
- msgid "Password Protection"
665
- msgstr ""
666
-
667
- #: views/packages/details/detail.php:345 views/packages/main/s1.setup2.php:431
668
- msgid "Show/Hide Password"
669
- msgstr ""
670
-
671
- #: views/packages/details/detail.php:355 views/packages/main/s1.setup2.php:457
672
- msgid " MySQL Server"
673
- msgstr ""
674
-
675
- #: views/packages/details/detail.php:358 views/packages/main/s1.setup2.php:460
676
- msgid "Host"
677
- msgstr ""
678
-
679
- #: views/packages/details/detail.php:359 views/packages/details/detail.php:363
680
- #: views/packages/details/detail.php:367
681
- msgid "- not set -"
682
- msgstr ""
683
-
684
- #: views/packages/details/detail.php:375
685
- msgid "View Package Object"
686
- msgstr ""
687
-
688
- #: views/packages/details/detail.php:392
689
- msgid "Package File Links"
690
- msgstr ""
691
-
692
- #: views/packages/details/detail.php:396
693
- msgid "PACKAGE"
694
- msgstr ""
695
-
696
- #: views/packages/details/detail.php:397
697
- msgid "INSTALLER"
698
- msgstr ""
699
-
700
- #: views/packages/details/detail.php:398
701
- msgid "LOG"
702
- msgstr ""
703
-
704
- #: views/packages/details/transfer.php:15
705
- msgid "Transfer your packages to multiple locations with Duplicator Pro"
706
- msgstr ""
707
-
708
- #: views/packages/details/transfer.php:20 views/settings/storage.php:19
709
- msgid "Amazon S3"
710
- msgstr ""
711
-
712
- #: views/packages/details/transfer.php:21
713
- msgid "Dropbox"
714
- msgstr ""
715
-
716
- #: views/packages/details/transfer.php:22 views/settings/storage.php:21
717
- msgid "Google Drive"
718
- msgstr ""
719
-
720
- #: views/packages/details/transfer.php:23 views/settings/storage.php:22
721
- msgid "One Drive"
722
- msgstr ""
723
-
724
- #: views/packages/details/transfer.php:24 views/settings/storage.php:23
725
- msgid "FTP &amp; SFTP"
726
- msgstr ""
727
-
728
- #: views/packages/details/transfer.php:25 views/settings/storage.php:24
729
- msgid "Custom Directory"
730
- msgstr ""
731
-
732
- #: views/packages/details/transfer.php:29
733
- msgid ""
734
- "Set up a one-time storage location and automatically push the package to "
735
- "your destination."
736
- msgstr ""
737
-
738
- #: views/packages/details/transfer.php:35 views/settings/schedule.php:22
739
- #: views/settings/storage.php:34 views/tools/templates.php:23
740
- msgid "Learn More"
741
- msgstr ""
742
-
743
- #: views/packages/main/controller.php:9
744
- msgid "An invalid request was made to this page."
745
- msgstr ""
746
-
747
- #: views/packages/main/controller.php:10
748
- msgid "Please retry by going to the"
749
- msgstr ""
750
-
751
- #: views/packages/main/controller.php:11
752
- msgid "Packages Screen"
753
- msgstr ""
754
-
755
- #: views/packages/main/controller.php:59
756
- msgid "Packages &raquo; All"
757
- msgstr ""
758
-
759
- #: views/packages/main/controller.php:63 views/packages/main/controller.php:67
760
- #: views/packages/main/controller.php:71
761
- msgid "Packages &raquo; New"
762
- msgstr ""
763
-
764
- #: views/packages/main/packages.php:77
765
- msgid "Bulk Actions"
766
- msgstr ""
767
-
768
- #: views/packages/main/packages.php:78
769
- msgid "Delete selected package(s)"
770
- msgstr ""
771
-
772
- #: views/packages/main/packages.php:78
773
- msgid "Delete"
774
- msgstr ""
775
-
776
- #: views/packages/main/packages.php:80
777
- msgid "Apply"
778
- msgstr ""
779
-
780
- #: views/packages/main/packages.php:98 views/packages/main/s1.setup1.php:73
781
- #: views/packages/main/s2.scan1.php:186 views/packages/main/s3.build.php:101
782
- msgid "Create New"
783
- msgstr ""
784
-
785
- #: views/packages/main/packages.php:114 views/packages/main/packages.php:148
786
- msgid "No Packages Found."
787
- msgstr ""
788
-
789
- #: views/packages/main/packages.php:115 views/packages/main/packages.php:149
790
- msgid "Click the 'Create New' button to build a package."
791
- msgstr ""
792
-
793
- #: views/packages/main/packages.php:117 views/packages/main/packages.php:151
794
- msgid "New to Duplicator?"
795
- msgstr ""
796
-
797
- #: views/packages/main/packages.php:119 views/packages/main/packages.php:153
798
- msgid "Check out the 'Quick Start' guide!"
799
- msgstr ""
800
-
801
- #: views/packages/main/packages.php:135
802
- msgid "Select all packages"
803
- msgstr ""
804
-
805
- #: views/packages/main/packages.php:136
806
- msgid "Created"
807
- msgstr ""
808
-
809
- #: views/packages/main/packages.php:137 views/packages/main/s2.scan3.php:88
810
- #: views/packages/main/s2.scan3.php:392
811
- msgid "Size"
812
- msgstr ""
813
-
814
- #: views/packages/main/packages.php:140 views/packages/main/s2.scan3.php:528
815
- msgid "Package"
816
- msgstr ""
817
-
818
- #: views/packages/main/packages.php:189
819
- msgid "Archive created as zip file"
820
- msgstr ""
821
-
822
- #: views/packages/main/packages.php:190
823
- msgid "Archive created as daf file"
824
- msgstr ""
825
-
826
- #: views/packages/main/packages.php:195 views/packages/main/s1.setup2.php:148
827
- #: views/packages/main/s2.scan3.php:35
828
- msgid "Database Only"
829
- msgstr ""
830
-
831
- #: views/packages/main/packages.php:199
832
- msgid "Package Build Running"
833
- msgstr ""
834
-
835
- #: views/packages/main/packages.php:200
836
- msgid ""
837
- "To stop or reset this package build goto Settings > Advanced > Reset Packages"
838
- msgstr ""
839
-
840
- #: views/packages/main/packages.php:210 views/packages/main/packages.php:228
841
- msgid "Package Details"
842
- msgstr ""
843
-
844
- #: views/packages/main/packages.php:226
845
- msgid "Error Processing"
846
- msgstr ""
847
-
848
- #: views/packages/main/packages.php:246
849
- msgid "Current Server Time"
850
- msgstr ""
851
-
852
- #: views/packages/main/packages.php:249 views/packages/main/s3.build.php:321
853
- msgid "Time"
854
- msgstr ""
855
-
856
- #: views/packages/main/packages.php:258
857
- msgid "Items"
858
- msgstr ""
859
-
860
- #: views/packages/main/packages.php:268
861
- msgid "Bulk Action Required"
862
- msgstr ""
863
-
864
- #: views/packages/main/packages.php:270
865
- msgid ""
866
- "No selections made! Please select an action from the \"Bulk Actions\" drop "
867
- "down menu."
868
- msgstr ""
869
-
870
- #: views/packages/main/packages.php:274
871
- msgid "Selection Required"
872
- msgstr ""
873
-
874
- #: views/packages/main/packages.php:276
875
- msgid "No selections made! Please select at least one package to delete."
876
- msgstr ""
877
-
878
- #: views/packages/main/packages.php:280
879
- msgid "Delete Packages?"
880
- msgstr ""
881
-
882
- #: views/packages/main/packages.php:281
883
- msgid "Are you sure you want to delete the selected package(s)?"
884
- msgstr ""
885
-
886
- #: views/packages/main/packages.php:282
887
- msgid "Removing Packages, Please Wait..."
888
- msgstr ""
889
-
890
- #: views/packages/main/packages.php:289
891
- msgid "Duplicator Help"
892
- msgstr ""
893
-
894
- #: views/packages/main/packages.php:294
895
- msgid "Alert!"
896
- msgstr ""
897
-
898
- #: views/packages/main/packages.php:295
899
- msgid "A package is being processed. Retry later."
900
- msgstr ""
901
-
902
- #: views/packages/main/packages.php:302
903
- msgid "Common Questions:"
904
- msgstr ""
905
-
906
- #: views/packages/main/packages.php:303
907
- msgid "How do I create a package"
908
- msgstr ""
909
-
910
- #: views/packages/main/packages.php:304
911
- msgid "How do I install a package?"
912
- msgstr ""
913
-
914
- #: views/packages/main/packages.php:305
915
- msgid "Frequently Asked Questions!"
916
- msgstr ""
917
-
918
- #: views/packages/main/packages.php:308
919
- msgid "Other Resources:"
920
- msgstr ""
921
-
922
- #: views/packages/main/packages.php:309
923
- msgid "Need help with the plugin?"
924
- msgstr ""
925
-
926
- #: views/packages/main/packages.php:310
927
- msgid "Have an idea for the plugin?"
928
- msgstr ""
929
-
930
- #: views/packages/main/packages.php:312
931
- msgid "Help review the plugin!"
932
- msgstr ""
933
-
934
- #: views/packages/main/s1.setup1.php:12
935
- msgid "Package settings have been reset."
936
- msgstr ""
937
-
938
- #: views/packages/main/s1.setup1.php:62 views/packages/main/s1.setup2.php:401
939
- #: views/packages/main/s2.scan1.php:175 views/packages/main/s2.scan2.php:56
940
- #: views/packages/main/s3.build.php:79
941
- msgid "Setup"
942
- msgstr ""
943
-
944
- #: views/packages/main/s1.setup1.php:63 views/packages/main/s2.scan1.php:176
945
- #: views/packages/main/s3.build.php:80
946
- msgid "Scan"
947
- msgstr ""
948
-
949
- #: views/packages/main/s1.setup1.php:64 views/packages/main/s2.scan1.php:177
950
- #: views/packages/main/s2.scan1.php:269 views/packages/main/s3.build.php:81
951
- msgid "Build"
952
- msgstr ""
953
-
954
- #: views/packages/main/s1.setup1.php:67
955
- msgid "Step 1: Package Setup"
956
- msgstr ""
957
-
958
- #: views/packages/main/s1.setup1.php:90
959
- msgid "Requirements:"
960
- msgstr ""
961
-
962
- #: views/packages/main/s1.setup1.php:99
963
- msgid ""
964
- "System requirements must pass for the Duplicator to work properly. Click "
965
- "each link for details."
966
- msgstr ""
967
-
968
- #: views/packages/main/s1.setup1.php:105
969
- msgid "PHP Support"
970
- msgstr ""
971
-
972
- #: views/packages/main/s1.setup1.php:111 views/packages/main/s2.scan2.php:68
973
- msgid "PHP Version"
974
- msgstr ""
975
-
976
- #: views/packages/main/s1.setup1.php:113
977
- msgid "PHP versions 5.2.9+ or higher is required."
978
- msgstr ""
979
-
980
- #: views/packages/main/s1.setup1.php:117
981
- msgid "Zip Archive Enabled"
982
- msgstr ""
983
-
984
- #: views/packages/main/s1.setup1.php:121
985
- msgid "ZipArchive extension is required or"
986
- msgstr ""
987
-
988
- #: views/packages/main/s1.setup1.php:122
989
- msgid "Switch to DupArchive"
990
- msgstr ""
991
-
992
- #: views/packages/main/s1.setup1.php:123
993
- msgid "to by-pass this requirement."
994
- msgstr ""
995
-
996
- #: views/packages/main/s1.setup1.php:129
997
- msgid "Safe Mode Off"
998
- msgstr ""
999
-
1000
- #: views/packages/main/s1.setup1.php:131
1001
- msgid ""
1002
- "Safe Mode should be set to Off in you php.ini file and is deprecated as of "
1003
- "PHP 5.3.0."
1004
- msgstr ""
1005
-
1006
- #: views/packages/main/s1.setup1.php:134 views/packages/main/s1.setup1.php:139
1007
- #: views/packages/main/s1.setup1.php:144
1008
- msgid "Function"
1009
- msgstr ""
1010
-
1011
- #: views/packages/main/s1.setup1.php:150
1012
- msgid ""
1013
- "For any issues in this section please contact your hosting provider or "
1014
- "server administrator. For additional information see our online "
1015
- "documentation."
1016
- msgstr ""
1017
-
1018
- #: views/packages/main/s1.setup1.php:158
1019
- msgid "Required Paths"
1020
- msgstr ""
1021
-
1022
- #: views/packages/main/s1.setup1.php:178
1023
- msgid ""
1024
- "If the root WordPress path is not writable by PHP on some systems this can "
1025
- "cause issues."
1026
- msgstr ""
1027
-
1028
- #: views/packages/main/s1.setup1.php:181
1029
- msgid ""
1030
- "If Duplicator does not have enough permissions then you will need to "
1031
- "manually create the paths above. &nbsp; "
1032
- msgstr ""
1033
-
1034
- #: views/packages/main/s1.setup1.php:190
1035
- msgid "Server Support"
1036
- msgstr ""
1037
-
1038
- #: views/packages/main/s1.setup1.php:196
1039
- msgid "MySQL Version"
1040
- msgstr ""
1041
-
1042
- #: views/packages/main/s1.setup1.php:200
1043
- msgid "MySQLi Support"
1044
- msgstr ""
1045
-
1046
- #: views/packages/main/s1.setup1.php:206
1047
- msgid ""
1048
- "MySQL version 5.0+ or better is required and the PHP MySQLi extension (note "
1049
- "the trailing 'i') is also required. Contact your server administrator and "
1050
- "request that mysqli extension and MySQL Server 5.0+ be installed."
1051
- msgstr ""
1052
-
1053
- #: views/packages/main/s1.setup1.php:207
1054
- #: views/tools/diagnostics/inc.data.php:26
1055
- msgid "more info"
1056
- msgstr ""
1057
-
1058
- #: views/packages/main/s1.setup1.php:216
1059
- msgid "Reserved Files"
1060
- msgstr ""
1061
-
1062
- #: views/packages/main/s1.setup1.php:221
1063
- msgid ""
1064
- "None of the reserved files where found from a previous install. This means "
1065
- "you are clear to create a new package."
1066
- msgstr ""
1067
-
1068
- #: views/packages/main/s1.setup1.php:229
1069
- msgid "WordPress Root Path:"
1070
- msgstr ""
1071
-
1072
- #: views/packages/main/s1.setup1.php:231
1073
- msgid "Remove Files Now"
1074
- msgstr ""
1075
-
1076
- #: views/packages/main/s1.setup2.php:76
1077
- msgid "Add Notes"
1078
- msgstr ""
1079
-
1080
- #: views/packages/main/s1.setup2.php:79
1081
- msgid "Toggle a default name"
1082
- msgstr ""
1083
-
1084
- #: views/packages/main/s1.setup2.php:146
1085
- msgid "File filter enabled"
1086
- msgstr ""
1087
-
1088
- #: views/packages/main/s1.setup2.php:147
1089
- msgid "Database filter enabled"
1090
- msgstr ""
1091
-
1092
- #: views/packages/main/s1.setup2.php:148 views/packages/main/s1.setup2.php:173
1093
- msgid "Archive Only the Database"
1094
- msgstr ""
1095
-
1096
- #: views/packages/main/s1.setup2.php:177
1097
- msgid "Enable File Filters"
1098
- msgstr ""
1099
-
1100
- #: views/packages/main/s1.setup2.php:179
1101
- msgid "File Filters:"
1102
- msgstr ""
1103
-
1104
- #: views/packages/main/s1.setup2.php:180
1105
- msgid ""
1106
- "File filters allow you to ignore directories and file extensions. When "
1107
- "creating a package only include the data you want and need. This helps to "
1108
- "improve the overall archive build time and keep your backups simple and "
1109
- "clean."
1110
- msgstr ""
1111
-
1112
- #: views/packages/main/s1.setup2.php:185 views/packages/main/s1.setup2.php:199
1113
- #: views/packages/main/s1.setup2.php:207
1114
- msgid "Separate all filters by semicolon"
1115
- msgstr ""
1116
-
1117
- #: views/packages/main/s1.setup2.php:187
1118
- msgid "Directories:"
1119
- msgstr ""
1120
-
1121
- #: views/packages/main/s1.setup2.php:188
1122
- msgid "Number of directories filtered"
1123
- msgstr ""
1124
-
1125
- #: views/packages/main/s1.setup2.php:192
1126
- msgid "root path"
1127
- msgstr ""
1128
-
1129
- #: views/packages/main/s1.setup2.php:193
1130
- msgid "wp-uploads"
1131
- msgstr ""
1132
-
1133
- #: views/packages/main/s1.setup2.php:194
1134
- msgid "cache"
1135
- msgstr ""
1136
-
1137
- #: views/packages/main/s1.setup2.php:195 views/packages/main/s1.setup2.php:203
1138
- #: views/packages/main/s1.setup2.php:215
1139
- msgid "(clear)"
1140
- msgstr ""
1141
-
1142
- #: views/packages/main/s1.setup2.php:199
1143
- msgid "File extensions"
1144
- msgstr ""
1145
-
1146
- #: views/packages/main/s1.setup2.php:201
1147
- msgid "media"
1148
- msgstr ""
1149
-
1150
- #: views/packages/main/s1.setup2.php:202
1151
- msgid "archive"
1152
- msgstr ""
1153
-
1154
- #: views/packages/main/s1.setup2.php:209
1155
- msgid "Files:"
1156
- msgstr ""
1157
-
1158
- #: views/packages/main/s1.setup2.php:210
1159
- msgid "Number of files filtered"
1160
- msgstr ""
1161
-
1162
- #: views/packages/main/s1.setup2.php:214
1163
- msgid "(file path)"
1164
- msgstr ""
1165
-
1166
- #: views/packages/main/s1.setup2.php:220
1167
- msgid ""
1168
- "The directory, file and extensions paths above will be excluded from the "
1169
- "archive file if enabled is checked."
1170
- msgstr ""
1171
-
1172
- #: views/packages/main/s1.setup2.php:221
1173
- msgid ""
1174
- "Use the full path for directories and files with semicolons to separate all "
1175
- "paths."
1176
- msgstr ""
1177
-
1178
- #: views/packages/main/s1.setup2.php:231
1179
- msgid ""
1180
- "This option has automatically been checked because you have opted for a <i "
1181
- "class='fa fa-random'></i> Two-Part Install Process. Please complete the "
1182
- "package build and continue with the "
1183
- msgstr ""
1184
-
1185
- #: views/packages/main/s1.setup2.php:234 views/packages/main/s3.build.php:279
1186
- msgid "Quick Start Two-Part Install Instructions"
1187
- msgstr ""
1188
-
1189
- #: views/packages/main/s1.setup2.php:238
1190
- msgid ""
1191
- "<b>Overview:</b><br/> This advanced option excludes all files from the "
1192
- "archive. Only the database and a copy of the installer.php will be included "
1193
- "in the archive.zip file. The option can be used for backing up and moving "
1194
- "only the database."
1195
- msgstr ""
1196
-
1197
- #: views/packages/main/s1.setup2.php:243
1198
- msgid "<b><i class='fa fa-exclamation-circle'></i> Notice:</b><br/>"
1199
- msgstr ""
1200
-
1201
- #: views/packages/main/s1.setup2.php:245
1202
- msgid ""
1203
- "Please use caution when installing only the database over an existing site "
1204
- "and be sure the correct files correspond with the database. For example, if "
1205
- "WordPress 4.6 is on this site and you copy the database to a host that has "
1206
- "WordPress 4.8 files then the source code of the files will not be in sync "
1207
- "with the database causing possible errors. If you’re immediately moving the "
1208
- "source files with the database then you can ignore this notice. Please use "
1209
- "this advanced feature with caution!"
1210
- msgstr ""
1211
-
1212
- #: views/packages/main/s1.setup2.php:267
1213
- msgid "Enable Table Filters"
1214
- msgstr ""
1215
-
1216
- #: views/packages/main/s1.setup2.php:269
1217
- msgid "Enable Table Filters:"
1218
- msgstr ""
1219
-
1220
- #: views/packages/main/s1.setup2.php:270
1221
- msgid ""
1222
- "Checked tables will not be added to the database script. Excluding certain "
1223
- "tables can possibly cause your site or plugins to not work correctly after "
1224
- "install!"
1225
- msgstr ""
1226
-
1227
- #: views/packages/main/s1.setup2.php:276
1228
- msgid "Include All"
1229
- msgstr ""
1230
-
1231
- #: views/packages/main/s1.setup2.php:277
1232
- msgid "Exclude All"
1233
- msgstr ""
1234
-
1235
- #: views/packages/main/s1.setup2.php:321
1236
- msgid "Checked tables will be <u>excluded</u> from the database script. "
1237
- msgstr ""
1238
-
1239
- #: views/packages/main/s1.setup2.php:322
1240
- msgid ""
1241
- "Excluding certain tables can cause your site or plugins to not work "
1242
- "correctly after install!<br/>"
1243
- msgstr ""
1244
-
1245
- #: views/packages/main/s1.setup2.php:323
1246
- msgid ""
1247
- "<i class='core-table-info'> Use caution when excluding tables! It is highly "
1248
- "recommended to not exclude WordPress core tables*, unless you know the "
1249
- "impact.</i>"
1250
- msgstr ""
1251
-
1252
- #: views/packages/main/s1.setup2.php:328
1253
- msgid "Compatibility Mode"
1254
- msgstr ""
1255
-
1256
- #: views/packages/main/s1.setup2.php:330
1257
- msgid "Compatibility Mode:"
1258
- msgstr ""
1259
-
1260
- #: views/packages/main/s1.setup2.php:331
1261
- msgid ""
1262
- "This is an advanced database backwards compatibility feature that should "
1263
- "ONLY be used if having problems installing packages. If the database server "
1264
- "version is lower than the version where the package was built then these "
1265
- "options may help generate a script that is more compliant with the older "
1266
- "database server. It is recommended to try each option separately starting "
1267
- "with mysql40."
1268
- msgstr ""
1269
-
1270
- #: views/packages/main/s1.setup2.php:352
1271
- msgid "mysql40"
1272
- msgstr ""
1273
-
1274
- #: views/packages/main/s1.setup2.php:356
1275
- msgid "no_table_options"
1276
- msgstr ""
1277
-
1278
- #: views/packages/main/s1.setup2.php:360
1279
- msgid "no_key_options"
1280
- msgstr ""
1281
-
1282
- #: views/packages/main/s1.setup2.php:364
1283
- msgid "no_field_options"
1284
- msgstr ""
1285
-
1286
- #: views/packages/main/s1.setup2.php:369
1287
- msgid "This option is only available with mysqldump mode."
1288
- msgstr ""
1289
-
1290
- #: views/packages/main/s1.setup2.php:382
1291
- msgid "Installer password protection is on"
1292
- msgstr ""
1293
-
1294
- #: views/packages/main/s1.setup2.php:383
1295
- msgid "Installer password protection is off"
1296
- msgstr ""
1297
-
1298
- #: views/packages/main/s1.setup2.php:390
1299
- msgid "All values in this section are"
1300
- msgstr ""
1301
-
1302
- #: views/packages/main/s1.setup2.php:390
1303
- msgid "optional"
1304
- msgstr ""
1305
-
1306
- #: views/packages/main/s1.setup2.php:392
1307
- msgid "Setup/Prefills"
1308
- msgstr ""
1309
-
1310
- #: views/packages/main/s1.setup2.php:393
1311
- msgid ""
1312
- "All values in this section are OPTIONAL! If you know ahead of time the "
1313
- "database input fields the installer will use, then you can optionally enter "
1314
- "them here and they will be prefilled at install time. Otherwise you can "
1315
- "just enter them in at install time and ignore all these options in the "
1316
- "Installer section."
1317
- msgstr ""
1318
-
1319
- #: views/packages/main/s1.setup2.php:404 views/packages/main/s1.setup2.php:409
1320
- msgid "Branding"
1321
- msgstr ""
1322
-
1323
- #: views/packages/main/s1.setup2.php:407
1324
- msgid "Available with Duplicator Pro - Freelancer!"
1325
- msgstr ""
1326
-
1327
- #: views/packages/main/s1.setup2.php:410
1328
- msgid ""
1329
- "Branding is a way to customize the installer look and feel. With branding "
1330
- "you can create multiple brands of installers."
1331
- msgstr ""
1332
-
1333
- #: views/packages/main/s1.setup2.php:415
1334
- msgid "Security"
1335
- msgstr ""
1336
-
1337
- #: views/packages/main/s1.setup2.php:422
1338
- msgid "Enable Password Protection"
1339
- msgstr ""
1340
-
1341
- #: views/packages/main/s1.setup2.php:424
1342
- msgid "Security:"
1343
- msgstr ""
1344
-
1345
- #: views/packages/main/s1.setup2.php:425
1346
- msgid ""
1347
- "Enabling this option will allow for basic password protection on the "
1348
- "installer. Before running the installer the password below must be entered "
1349
- "before proceeding with an install. This password is a general deterrent and "
1350
- "should not be substituted for properly keeping your files secure. Be sure "
1351
- "to remove all installer files when the install process is completed."
1352
- msgstr ""
1353
-
1354
- #: views/packages/main/s1.setup2.php:440
1355
- msgid "Prefills"
1356
- msgstr ""
1357
-
1358
- #: views/packages/main/s1.setup2.php:448
1359
- msgid "Basic"
1360
- msgstr ""
1361
-
1362
- #: views/packages/main/s1.setup2.php:449 views/settings/gopro.php:176
1363
- msgid "cPanel"
1364
- msgstr ""
1365
-
1366
- #: views/packages/main/s1.setup2.php:461
1367
- msgid "example: localhost (value is optional)"
1368
- msgstr ""
1369
-
1370
- #: views/packages/main/s1.setup2.php:464
1371
- msgid "Host Port"
1372
- msgstr ""
1373
-
1374
- #: views/packages/main/s1.setup2.php:465
1375
- msgid "example: 3306 (value is optional)"
1376
- msgstr ""
1377
-
1378
- #: views/packages/main/s1.setup2.php:469
1379
- msgid "example: DatabaseName (value is optional)"
1380
- msgstr ""
1381
-
1382
- #: views/packages/main/s1.setup2.php:473
1383
- msgid "example: DatabaseUserName (value is optional)"
1384
- msgstr ""
1385
-
1386
- #: views/packages/main/s1.setup2.php:483
1387
- msgid ""
1388
- "Create the database and database user at install time without leaving the "
1389
- "installer!"
1390
- msgstr ""
1391
-
1392
- #: views/packages/main/s1.setup2.php:484
1393
- msgid "This feature is only availble in "
1394
- msgstr ""
1395
-
1396
- #: views/packages/main/s1.setup2.php:485
1397
- msgid "Duplicator Pro!"
1398
- msgstr ""
1399
-
1400
- #: views/packages/main/s1.setup2.php:486
1401
- msgid "This feature works only with hosts that support cPanel."
1402
- msgstr ""
1403
-
1404
- #: views/packages/main/s1.setup2.php:498
1405
- msgid "Reset"
1406
- msgstr ""
1407
-
1408
- #: views/packages/main/s1.setup2.php:499
1409
- msgid "Next"
1410
- msgstr ""
1411
-
1412
- #: views/packages/main/s1.setup2.php:508
1413
- msgid "Reset Package Settings?"
1414
- msgstr ""
1415
-
1416
- #: views/packages/main/s1.setup2.php:509
1417
- msgid ""
1418
- "This will clear and reset all of the current package settings. Would you "
1419
- "like to continue?"
1420
- msgstr ""
1421
-
1422
- #: views/packages/main/s2.scan1.php:148
1423
- msgid "Input fields not valid"
1424
- msgstr ""
1425
-
1426
- #: views/packages/main/s2.scan1.php:149 views/packages/main/s2.scan1.php:207
1427
- msgid "Please try again!"
1428
- msgstr ""
1429
-
1430
- #: views/packages/main/s2.scan1.php:151 views/packages/main/s2.scan1.php:212
1431
- #: views/packages/main/s3.build.php:353
1432
- msgid "Error Message:"
1433
- msgstr ""
1434
-
1435
- #: views/packages/main/s2.scan1.php:161 views/packages/main/s2.scan1.php:267
1436
- msgid "Back"
1437
- msgstr ""
1438
-
1439
- #: views/packages/main/s2.scan1.php:180
1440
- msgid "Step 2: System Scan"
1441
- msgstr ""
1442
-
1443
- #: views/packages/main/s2.scan1.php:197
1444
- msgid "Scanning Site"
1445
- msgstr ""
1446
-
1447
- #: views/packages/main/s2.scan1.php:199 views/packages/main/s3.build.php:116
1448
- msgid "Please Wait..."
1449
- msgstr ""
1450
-
1451
- #: views/packages/main/s2.scan1.php:200
1452
- msgid "Keep this window open during the scan process."
1453
- msgstr ""
1454
-
1455
- #: views/packages/main/s2.scan1.php:201
1456
- msgid "This can take several minutes."
1457
- msgstr ""
1458
-
1459
- #: views/packages/main/s2.scan1.php:206
1460
- msgid "Scan Error"
1461
- msgstr ""
1462
-
1463
- #: views/packages/main/s2.scan1.php:209 views/packages/main/s3.build.php:349
1464
- msgid "Server Status:"
1465
- msgstr ""
1466
-
1467
- #: views/packages/main/s2.scan1.php:221
1468
- msgid "Scan Complete"
1469
- msgstr ""
1470
-
1471
- #: views/packages/main/s2.scan1.php:223
1472
- msgid "Process Time:"
1473
- msgstr ""
1474
-
1475
- #: views/packages/main/s2.scan1.php:239
1476
- msgid "A notice status has been detected, are you sure you want to continue?"
1477
- msgstr ""
1478
-
1479
- #: views/packages/main/s2.scan1.php:243
1480
- msgid "Yes. Continue with the build process!"
1481
- msgstr ""
1482
-
1483
- #: views/packages/main/s2.scan1.php:249
1484
- msgid ""
1485
- "Scan checks are not required to pass, however they could cause issues on "
1486
- "some systems."
1487
- msgstr ""
1488
-
1489
- #: views/packages/main/s2.scan1.php:251
1490
- msgid ""
1491
- "Please review the details for each section by clicking on the detail title."
1492
- msgstr ""
1493
-
1494
- #: views/packages/main/s2.scan1.php:258
1495
- msgid "Do you want to continue?"
1496
- msgstr ""
1497
-
1498
- #: views/packages/main/s2.scan1.php:260
1499
- msgid "At least one or more checkboxes was checked in \"Quick Filters\"."
1500
- msgstr ""
1501
-
1502
- #: views/packages/main/s2.scan1.php:261
1503
- msgid "To apply a \"Quick Filter\" click the \"Add Filters & Rescan\" button"
1504
- msgstr ""
1505
-
1506
- #: views/packages/main/s2.scan1.php:263
1507
- msgid "Yes. Continue without applying any file filters."
1508
- msgstr ""
1509
-
1510
- #: views/packages/main/s2.scan1.php:268
1511
- msgid "Rescan"
1512
- msgstr ""
1513
-
1514
- #: views/packages/main/s2.scan1.php:414
1515
- msgid "Unable to perform a full scan, please try the following actions:"
1516
- msgstr ""
1517
-
1518
- #: views/packages/main/s2.scan1.php:415
1519
- msgid ""
1520
- "1. Go back and create a root path directory filter to validate the site is "
1521
- "scan-able."
1522
- msgstr ""
1523
-
1524
- #: views/packages/main/s2.scan1.php:416
1525
- msgid ""
1526
- "2. Continue to add/remove filters to isolate which path is causing issues."
1527
- msgstr ""
1528
-
1529
- #: views/packages/main/s2.scan1.php:417
1530
- msgid "3. This message will go away once the correct filters are applied."
1531
- msgstr ""
1532
-
1533
- #: views/packages/main/s2.scan1.php:419
1534
- msgid "Common Issues:"
1535
- msgstr ""
1536
-
1537
- #: views/packages/main/s2.scan1.php:420
1538
- msgid ""
1539
- "- On some budget hosts scanning over 30k files can lead to timeout/gateway "
1540
- "issues. Consider scanning only your main WordPress site and avoid trying to "
1541
- "backup other external directories."
1542
- msgstr ""
1543
-
1544
- #: views/packages/main/s2.scan1.php:421
1545
- msgid ""
1546
- "- Symbolic link recursion can cause timeouts. Ask your server admin if any "
1547
- "are present in the scan path. If they are add the full path as a filter and "
1548
- "try running the scan again."
1549
- msgstr ""
1550
-
1551
- #: views/packages/main/s2.scan1.php:434 views/packages/main/s2.scan3.php:57
1552
- #: views/packages/main/s2.scan3.php:68 views/packages/main/s3.build.php:245
1553
- msgid "Notice"
1554
- msgstr ""
1555
-
1556
- #: views/packages/main/s2.scan1.php:436
1557
- msgid "Good"
1558
- msgstr ""
1559
-
1560
- #: views/packages/main/s2.scan1.php:437
1561
- msgid "Fail"
1562
- msgstr ""
1563
-
1564
- #: views/packages/main/s2.scan2.php:7
1565
- msgid "Server"
1566
- msgstr ""
1567
-
1568
- #: views/packages/main/s2.scan2.php:8
1569
- msgid "Show Diagnostics"
1570
- msgstr ""
1571
-
1572
- #: views/packages/main/s2.scan2.php:63
1573
- #: views/tools/diagnostics/inc.settings.php:51
1574
- msgid "Web Server"
1575
- msgstr ""
1576
-
1577
- #: views/packages/main/s2.scan2.php:64
1578
- msgid "Supported web servers: "
1579
- msgstr ""
1580
-
1581
- #: views/packages/main/s2.scan2.php:69
1582
- msgid ""
1583
- "The minimum PHP version supported by Duplicator is 5.2.9. It is highly "
1584
- "recommended to use PHP 5.3+ for improved stability. For international "
1585
- "language support please use PHP 7.0+."
1586
- msgstr ""
1587
-
1588
- #: views/packages/main/s2.scan2.php:74
1589
- msgid "PHP Open Base Dir"
1590
- msgstr ""
1591
-
1592
- #: views/packages/main/s2.scan2.php:75
1593
- msgid ""
1594
- "Issues might occur when [open_basedir] is enabled. Work with your server "
1595
- "admin to disable this value in the php.ini file if you’re having issues "
1596
- "building a package."
1597
- msgstr ""
1598
-
1599
- #: views/packages/main/s2.scan2.php:80 views/packages/main/s3.build.php:328
1600
- msgid "PHP Max Execution Time"
1601
- msgstr ""
1602
-
1603
- #: views/packages/main/s2.scan2.php:81
1604
- msgid ""
1605
- "Timeouts may occur for larger packages when [max_execution_time] time in the "
1606
- "php.ini is too low. A value of 0 (recommended) indicates that PHP has no "
1607
- "time limits. An attempt is made to override this value if the server allows "
1608
- "it."
1609
- msgstr ""
1610
-
1611
- #: views/packages/main/s2.scan2.php:84
1612
- msgid ""
1613
- "Note: Timeouts can also be set at the web server layer, so if the PHP max "
1614
- "timeout passes and you still see a build timeout messages, then your web "
1615
- "server could be killing the process. If you are on a budget host and "
1616
- "limited on processing time, consider using the database or file filters to "
1617
- "shrink the size of your overall package. However use caution as excluding "
1618
- "the wrong resources can cause your install to not work properly."
1619
- msgstr ""
1620
-
1621
- #: views/packages/main/s2.scan2.php:92
1622
- msgid "Get faster builds with Duplicator Pro with access to shell_exec zip."
1623
- msgstr ""
1624
-
1625
- #: views/packages/main/s2.scan2.php:112
1626
- msgid "WordPress Version"
1627
- msgstr ""
1628
-
1629
- #: views/packages/main/s2.scan2.php:113
1630
- #, php-format
1631
- msgid ""
1632
- "It is recommended to have a version of WordPress that is greater than %1$s. "
1633
- "Older version of WordPress can lead to migration issues and are a security "
1634
- "risk. If possible please update your WordPress site to the latest version."
1635
- msgstr ""
1636
-
1637
- #: views/packages/main/s2.scan2.php:117
1638
- msgid "Core Files"
1639
- msgstr ""
1640
-
1641
- #: views/packages/main/s2.scan2.php:123
1642
- msgid ""
1643
- "The core WordPress paths below will <u>not</u> be included in the archive. "
1644
- "These paths are required for WordPress to function!"
1645
- msgstr ""
1646
-
1647
- #: views/packages/main/s2.scan2.php:134
1648
- msgid ""
1649
- "The core WordPress file below will <u>not</u> be included in the archive. "
1650
- "This file is required for WordPress to function!"
1651
- msgstr ""
1652
-
1653
- #: views/packages/main/s2.scan2.php:147
1654
- msgid " to the new location for the site to function properly."
1655
- msgstr ""
1656
-
1657
- #: views/packages/main/s2.scan2.php:153
1658
- msgid ""
1659
- "If the scanner is unable to locate the wp-config.php file in the root "
1660
- "directory, then you will need to manually copy it to its new location. This "
1661
- "check will also look for core WordPress paths that should be included in the "
1662
- "archive for WordPress to work correctly."
1663
- msgstr ""
1664
-
1665
- #: views/packages/main/s2.scan2.php:172
1666
- msgid "Multisite: Unsupported"
1667
- msgstr ""
1668
-
1669
- #: views/packages/main/s2.scan2.php:173
1670
- msgid ""
1671
- "Duplicator does not support WordPress multisite migrations. We recommend "
1672
- "using Duplicator Pro which currently supports full multisite migrations and "
1673
- "subsite to standalone site migrations."
1674
- msgstr ""
1675
-
1676
- #: views/packages/main/s2.scan2.php:177
1677
- msgid ""
1678
- "While it is not recommended you can still continue with the build of this "
1679
- "package. Please note that at install time additional manual custom "
1680
- "configurations will need to be made to finalize this multisite migration."
1681
- msgstr ""
1682
-
1683
- #: views/packages/main/s2.scan2.php:179 views/packages/main/s2.scan2.php:184
1684
- msgid "upgrade to pro"
1685
- msgstr ""
1686
-
1687
- #: views/packages/main/s2.scan2.php:181
1688
- msgid "Multisite: N/A"
1689
- msgstr ""
1690
-
1691
- #: views/packages/main/s2.scan2.php:182
1692
- msgid ""
1693
- "This is not a multisite install so duplication will proceed without issue. "
1694
- "Duplicator does not officially support multisite. However, Duplicator Pro "
1695
- "supports duplication of a full multisite network and also has the ability to "
1696
- "install a multisite subsite as a standalone site."
1697
- msgstr ""
1698
-
1699
- #: views/packages/main/s2.scan3.php:6
1700
- #: views/tools/diagnostics/inc.settings.php:55
1701
- msgid "Root Path"
1702
- msgstr ""
1703
-
1704
- #: views/packages/main/s2.scan3.php:23
1705
- msgid "Show Scan Details"
1706
- msgstr ""
1707
-
1708
- #: views/packages/main/s2.scan3.php:38 views/packages/main/s2.scan3.php:370
1709
- #: views/packages/main/s2.scan3.php:557 views/settings/general.php:158
1710
- #: views/tools/diagnostics/inc.settings.php:167
1711
- msgid "Enabled"
1712
- msgstr ""
1713
-
1714
- #: views/packages/main/s2.scan3.php:44
1715
- msgid "Archive Size"
1716
- msgstr ""
1717
-
1718
- #: views/packages/main/s2.scan3.php:45
1719
- msgid ""
1720
- "This size includes only files BEFORE compression is applied. It does not "
1721
- "include the size of the database script or any applied filters. Once "
1722
- "complete the package size will be smaller than this number."
1723
- msgstr ""
1724
-
1725
- #: views/packages/main/s2.scan3.php:48 views/packages/main/s2.scan3.php:380
1726
- #: views/packages/main/s2.scan3.php:442
1727
- msgid "uncompressed"
1728
- msgstr ""
1729
-
1730
- #: views/packages/main/s2.scan3.php:56
1731
- msgid "Database only"
1732
- msgstr ""
1733
-
1734
- #: views/packages/main/s2.scan3.php:60
1735
- msgid ""
1736
- "Only the database and a copy of the installer.php will be included in the "
1737
- "archive.zip file."
1738
- msgstr ""
1739
-
1740
- #: views/packages/main/s2.scan3.php:67
1741
- msgid "Skip archive scan enabled"
1742
- msgstr ""
1743
-
1744
- #: views/packages/main/s2.scan3.php:71
1745
- msgid ""
1746
- "All file checks are skipped. This could cause problems during extraction if "
1747
- "problematic files are included."
1748
- msgstr ""
1749
-
1750
- #: views/packages/main/s2.scan3.php:73
1751
- msgid " Disable the advanced option to re-enable file controls."
1752
- msgstr ""
1753
-
1754
- #: views/packages/main/s2.scan3.php:84
1755
- msgid "Size Checks"
1756
- msgstr ""
1757
-
1758
- #: views/packages/main/s2.scan3.php:89
1759
- msgid "File Count"
1760
- msgstr ""
1761
-
1762
- #: views/packages/main/s2.scan3.php:90
1763
- msgid "Directory Count"
1764
- msgstr ""
1765
-
1766
- #: views/packages/main/s2.scan3.php:92
1767
- msgid ""
1768
- "Compressing larger sites on <i>some budget hosts</i> may cause timeouts. "
1769
- msgstr ""
1770
-
1771
- #: views/packages/main/s2.scan3.php:93
1772
- msgid "more details..."
1773
- msgstr ""
1774
-
1775
- #: views/packages/main/s2.scan3.php:97 views/packages/main/s2.scan3.php:387
1776
- #: views/packages/main/s3.build.php:203 views/packages/screen.php:53
1777
- msgid "Overview"
1778
- msgstr ""
1779
-
1780
- #: views/packages/main/s2.scan3.php:99
1781
- #, php-format
1782
- msgid ""
1783
- "This notice is triggered at [%s] and can be ignored on most hosts. If "
1784
- "during the build process you see a \"Host Build Interrupt\" message then "
1785
- "this host has strict processing limits. Below are some options you can take "
1786
- "to overcome constraints set up on this host."
1787
- msgstr ""
1788
-
1789
- #: views/packages/main/s2.scan3.php:103
1790
- msgid "Timeout Options"
1791
- msgstr ""
1792
-
1793
- #: views/packages/main/s2.scan3.php:105
1794
- msgid ""
1795
- "Apply the \"Quick Filters\" below or click the back button to apply on "
1796
- "previous page."
1797
- msgstr ""
1798
-
1799
- #: views/packages/main/s2.scan3.php:106
1800
- msgid "See the FAQ link to adjust this hosts timeout limits: "
1801
- msgstr ""
1802
-
1803
- #: views/packages/main/s2.scan3.php:106
1804
- msgid "What can I try for Timeout Issues?"
1805
- msgstr ""
1806
-
1807
- #: views/packages/main/s2.scan3.php:107
1808
- msgid "Consider trying multi-threaded support in "
1809
- msgstr ""
1810
-
1811
- #: views/packages/main/s2.scan3.php:108
1812
- msgid "Duplicator Pro."
1813
- msgstr ""
1814
-
1815
- #: views/packages/main/s2.scan3.php:112
1816
- #, php-format
1817
- msgid ""
1818
- "Files over %1$s are listed below. Larger files such as movies or zipped "
1819
- "content can cause timeout issues on some budget hosts. If you are having "
1820
- "issues creating a package try excluding the directory paths below or go back "
1821
- "to Step 1 and add them."
1822
- msgstr ""
1823
-
1824
- #: views/packages/main/s2.scan3.php:121 views/packages/main/s2.scan3.php:208
1825
- #: views/packages/main/s2.scan3.php:257
1826
- msgid "Quick Filters"
1827
- msgstr ""
1828
-
1829
- #: views/packages/main/s2.scan3.php:122
1830
- msgid "Large Files"
1831
- msgstr ""
1832
-
1833
- #: views/packages/main/s2.scan3.php:125 views/packages/main/s2.scan3.php:260
1834
- msgid "Hide All"
1835
- msgstr ""
1836
-
1837
- #: views/packages/main/s2.scan3.php:126 views/packages/main/s2.scan3.php:261
1838
- msgid "Show All"
1839
- msgstr ""
1840
-
1841
- #: views/packages/main/s2.scan3.php:136 views/packages/main/s2.scan3.php:276
1842
- msgid ""
1843
- "Core WordPress directories should not be filtered. Use caution when "
1844
- "excluding files."
1845
- msgstr ""
1846
-
1847
- #: views/packages/main/s2.scan3.php:156
1848
- msgid "No large files found during this scan."
1849
- msgstr ""
1850
-
1851
- #: views/packages/main/s2.scan3.php:159
1852
- msgid ""
1853
- "No large files found during this scan. If you're having issues building a "
1854
- "package click the back button and try adding a file filter to non-essential "
1855
- "files paths like wp-content/uploads. These excluded files can then be "
1856
- "manually moved to the new location after you have ran the migration "
1857
- "installer."
1858
- msgstr ""
1859
-
1860
- #: views/packages/main/s2.scan3.php:172 views/packages/main/s2.scan3.php:302
1861
- msgid ""
1862
- "*Checking a directory will exclude all items recursively from that path "
1863
- "down. Please use caution when filtering directories."
1864
- msgstr ""
1865
-
1866
- #: views/packages/main/s2.scan3.php:175 views/packages/main/s2.scan3.php:231
1867
- #: views/packages/main/s2.scan3.php:305
1868
- msgid "Add Filters &amp; Rescan"
1869
- msgstr ""
1870
-
1871
- #: views/packages/main/s2.scan3.php:177 views/packages/main/s2.scan3.php:307
1872
- msgid "Copy Paths to Clipboard"
1873
- msgstr ""
1874
-
1875
- #: views/packages/main/s2.scan3.php:193
1876
- msgid "Addon Sites"
1877
- msgstr ""
1878
-
1879
- #: views/packages/main/s2.scan3.php:199
1880
- msgid ""
1881
- "An \"Addon Site\" is a separate WordPress site(s) residing in subdirectories "
1882
- "within this site. If you confirm these to be separate sites, then it is "
1883
- "recommended that you exclude them by checking the corresponding boxes below "
1884
- "and clicking the 'Add Filters & Rescan' button. To backup the other sites "
1885
- "install the plugin on the sites needing to be backed-up."
1886
- msgstr ""
1887
-
1888
- #: views/packages/main/s2.scan3.php:222
1889
- msgid "No add on sites found."
1890
- msgstr ""
1891
-
1892
- #: views/packages/main/s2.scan3.php:228
1893
- msgid "*Checking a directory will exclude all items in that path recursively."
1894
- msgstr ""
1895
-
1896
- #: views/packages/main/s2.scan3.php:244 views/packages/main/s2.scan3.php:258
1897
- msgid "Name Checks"
1898
- msgstr ""
1899
-
1900
- #: views/packages/main/s2.scan3.php:249
1901
- msgid ""
1902
- "Unicode and special characters such as \"*?><:/\\|\", can be problematic on "
1903
- "some hosts."
1904
- msgstr ""
1905
-
1906
- #: views/packages/main/s2.scan3.php:250
1907
- msgid ""
1908
- " Only consider using this filter if the package build is failing. Select "
1909
- "files that are not important to your site or you can migrate manually."
1910
- msgstr ""
1911
-
1912
- #: views/packages/main/s2.scan3.php:251
1913
- msgid ""
1914
- "If this environment/system and the system where it will be installed are set "
1915
- "up to support Unicode and long paths then these filters can be ignored. If "
1916
- "you run into issues with creating or installing a package, then is "
1917
- "recommended to filter these paths."
1918
- msgstr ""
1919
-
1920
- #: views/packages/main/s2.scan3.php:296
1921
- msgid "No file/directory name warnings found."
1922
- msgstr ""
1923
-
1924
- #: views/packages/main/s2.scan3.php:319
1925
- msgid "Read Checks"
1926
- msgstr ""
1927
-
1928
- #: views/packages/main/s2.scan3.php:324
1929
- msgid ""
1930
- "PHP is unable to read the following items and they will NOT be included in "
1931
- "the package. Please work with your host to adjust the permissions or "
1932
- "resolve the symbolic-link(s) shown in the lists below. If these items are "
1933
- "not needed then this notice can be ignored."
1934
- msgstr ""
1935
-
1936
- #: views/packages/main/s2.scan3.php:330
1937
- msgid "Unreadable Items:"
1938
- msgstr ""
1939
-
1940
- #: views/packages/main/s2.scan3.php:337
1941
- msgid "No unreadable items found."
1942
- msgstr ""
1943
-
1944
- #: views/packages/main/s2.scan3.php:341
1945
- msgid "Recursive Links:"
1946
- msgstr ""
1947
-
1948
- #: views/packages/main/s2.scan3.php:348
1949
- msgid "No recursive sym-links found."
1950
- msgstr ""
1951
-
1952
- #: views/packages/main/s2.scan3.php:376
1953
- msgid "Database Size:"
1954
- msgstr ""
1955
-
1956
- #: views/packages/main/s2.scan3.php:377
1957
- msgid ""
1958
- "The database size represents only the included tables. The process for "
1959
- "gathering the size uses the query SHOW TABLE STATUS. The overall size of "
1960
- "the database file can impact the final size of the package."
1961
- msgstr ""
1962
-
1963
- #: views/packages/main/s2.scan3.php:391
1964
- msgid "TOTAL SIZE"
1965
- msgstr ""
1966
-
1967
- #: views/packages/main/s2.scan3.php:394
1968
- msgid "Records"
1969
- msgstr ""
1970
-
1971
- #: views/packages/main/s2.scan3.php:397
1972
- #, php-format
1973
- msgid ""
1974
- "Total size and row counts are approximate values. The thresholds that "
1975
- "trigger notices are %1$s records total for the entire database. Larger "
1976
- "databases take more time to process. On some budget hosts that have cpu/"
1977
- "memory/timeout limits this may cause issues."
1978
- msgstr ""
1979
-
1980
- #: views/packages/main/s2.scan3.php:402
1981
- msgid "TABLE DETAILS:"
1982
- msgstr ""
1983
-
1984
- #: views/packages/main/s2.scan3.php:404
1985
- #, php-format
1986
- msgid ""
1987
- "The notices for tables are %1$s records or names with upper-case "
1988
- "characters. Individual tables will not trigger a notice message, but can "
1989
- "help narrow down issues if they occur later on."
1990
- msgstr ""
1991
-
1992
- #: views/packages/main/s2.scan3.php:411 views/packages/main/s2.scan3.php:463
1993
- msgid "RECOMMENDATIONS:"
1994
- msgstr ""
1995
-
1996
- #: views/packages/main/s2.scan3.php:414
1997
- msgid "repair and optimization"
1998
- msgstr ""
1999
-
2000
- #: views/packages/main/s2.scan3.php:415
2001
- #, php-format
2002
- msgid "1. Run a %1$s on the table to improve the overall size and performance."
2003
- msgstr ""
2004
-
2005
- #: views/packages/main/s2.scan3.php:417
2006
- msgid ""
2007
- "2. Remove post revisions and stale data from tables. Tables such as logs, "
2008
- "statistical or other non-critical data should be cleared."
2009
- msgstr ""
2010
-
2011
- #: views/packages/main/s2.scan3.php:419
2012
- msgid "Enable mysqldump"
2013
- msgstr ""
2014
-
2015
- #: views/packages/main/s2.scan3.php:420
2016
- #, php-format
2017
- msgid "3. %1$s if this host supports the option."
2018
- msgstr ""
2019
-
2020
- #: views/packages/main/s2.scan3.php:422
2021
- msgid "lower_case_table_names"
2022
- msgstr ""
2023
-
2024
- #: views/packages/main/s2.scan3.php:423
2025
- #, php-format
2026
- msgid ""
2027
- "4. For table name case sensitivity issues either rename the table with lower "
2028
- "case characters or be prepared to work with the %1$s system variable setting."
2029
- msgstr ""
2030
-
2031
- #: views/packages/main/s2.scan3.php:434
2032
- msgid "Total Size"
2033
- msgstr ""
2034
-
2035
- #: views/packages/main/s2.scan3.php:439
2036
- msgid "Total Size:"
2037
- msgstr ""
2038
-
2039
- #: views/packages/main/s2.scan3.php:440
2040
- msgid "The total size of the site (files plus database)."
2041
- msgstr ""
2042
-
2043
- #: views/packages/main/s2.scan3.php:450
2044
- #, php-format
2045
- msgid ""
2046
- "The build can't continue because the total size of files and the database "
2047
- "exceeds the %s limit that can be processed when creating a DupArchive "
2048
- "package. "
2049
- msgstr ""
2050
-
2051
- #: views/packages/main/s2.scan3.php:451
2052
- msgid ""
2053
- "<a href=\"javascript:void(0)\" onclick=\"jQuery('#data-ll-status-"
2054
- "recommendations').toggle()\">Click for recommendations.</a>"
2055
- msgstr ""
2056
-
2057
- #: views/packages/main/s2.scan3.php:457 views/packages/main/s2.scan3.php:531
2058
- #: views/settings/packages.php:208
2059
- msgid "Archive Engine"
2060
- msgstr ""
2061
-
2062
- #: views/packages/main/s2.scan3.php:459
2063
- #, php-format
2064
- msgid ""
2065
- " With DupArchive, Duplicator is restricted to processing sites up to %s. To "
2066
- "process larger sites, consider these recommendations. "
2067
- msgstr ""
2068
-
2069
- #: views/packages/main/s2.scan3.php:468
2070
- msgid "Step 1"
2071
- msgstr ""
2072
-
2073
- #: views/packages/main/s2.scan3.php:469
2074
- #, php-format
2075
- msgid "- Add data filters to get the package size under %s: "
2076
- msgstr ""
2077
-
2078
- #: views/packages/main/s2.scan3.php:471
2079
- msgid ""
2080
- "- In the 'Size Checks' section above consider adding filters (if notice is "
2081
- "shown)."
2082
- msgstr ""
2083
-
2084
- #: views/packages/main/s2.scan3.php:473
2085
- #, php-format
2086
- msgid "- In %s consider adding file/directory or database table filters."
2087
- msgstr ""
2088
-
2089
- #: views/packages/main/s2.scan3.php:477
2090
- msgid "covered here."
2091
- msgstr ""
2092
-
2093
- #: views/packages/main/s2.scan3.php:478
2094
- #, php-format
2095
- msgid "- Perform a two part install %s"
2096
- msgstr ""
2097
-
2098
- #: views/packages/main/s2.scan3.php:481
2099
- msgid "ZipArchive Engine"
2100
- msgstr ""
2101
-
2102
- #: views/packages/main/s2.scan3.php:482
2103
- #, php-format
2104
- msgid ""
2105
- "- Switch to the %s which requires a capable hosting provider (VPS "
2106
- "recommended)."
2107
- msgstr ""
2108
-
2109
- #: views/packages/main/s2.scan3.php:486
2110
- #, php-format
2111
- msgid "- Consider upgrading to %s for large site support. (unlimited)"
2112
- msgstr ""
2113
-
2114
- #: views/packages/main/s2.scan3.php:496
2115
- msgid "Migrate large, multi-gig sites with"
2116
- msgstr ""
2117
-
2118
- #: views/packages/main/s2.scan3.php:511
2119
- msgid "Scan Details"
2120
- msgstr ""
2121
-
2122
- #: views/packages/main/s2.scan3.php:518
2123
- msgid "Copy Quick Filter Paths"
2124
- msgstr ""
2125
-
2126
- #: views/packages/main/s2.scan3.php:537
2127
- msgid "Name:"
2128
- msgstr ""
2129
-
2130
- #: views/packages/main/s2.scan3.php:538
2131
- msgid "Host:"
2132
- msgstr ""
2133
-
2134
- #: views/packages/main/s2.scan3.php:540
2135
- msgid "Build Mode:"
2136
- msgstr ""
2137
-
2138
- #: views/packages/main/s2.scan3.php:556 views/settings/gopro.php:55
2139
- msgid "File Filters"
2140
- msgstr ""
2141
-
2142
- #: views/packages/main/s2.scan3.php:557
2143
- #: views/tools/diagnostics/inc.settings.php:167
2144
- msgid "Disabled"
2145
- msgstr ""
2146
-
2147
- #: views/packages/main/s2.scan3.php:571
2148
- msgid "No custom directory filters set."
2149
- msgstr ""
2150
-
2151
- #: views/packages/main/s2.scan3.php:581
2152
- msgid "No file extension filters have been set."
2153
- msgstr ""
2154
-
2155
- #: views/packages/main/s2.scan3.php:593
2156
- msgid "No custom file filters set."
2157
- msgstr ""
2158
-
2159
- #: views/packages/main/s2.scan3.php:597
2160
- msgid "Auto Directory Filters"
2161
- msgstr ""
2162
-
2163
- #: views/packages/main/s2.scan3.php:603
2164
- msgid "Auto File Filters"
2165
- msgstr ""
2166
-
2167
- #: views/packages/main/s2.scan3.php:616
2168
- msgid "Path filters will be skipped during the archive process when enabled."
2169
- msgstr ""
2170
-
2171
- #: views/packages/main/s2.scan3.php:618
2172
- msgid "[view json result report]"
2173
- msgstr ""
2174
-
2175
- #: views/packages/main/s2.scan3.php:621
2176
- msgid "Auto filters are applied to prevent archiving other backup sets."
2177
- msgstr ""
2178
-
2179
- #: views/packages/main/s2.scan3.php:632 views/packages/main/s2.scan3.php:641
2180
- msgid "Click to Copy"
2181
- msgstr ""
2182
-
2183
- #: views/packages/main/s2.scan3.php:646
2184
- msgid ""
2185
- "Copy the paths above and apply them as needed on Step 1 &gt; Archive &gt; "
2186
- "Files section."
2187
- msgstr ""
2188
-
2189
- #: views/packages/main/s2.scan3.php:663
2190
- msgid "Directory applied filter set."
2191
- msgstr ""
2192
-
2193
- #: views/packages/main/s2.scan3.php:690
2194
- msgid "No directories have been selected!"
2195
- msgstr ""
2196
-
2197
- #: views/packages/main/s2.scan3.php:694
2198
- msgid "No files have been selected!"
2199
- msgstr ""
2200
-
2201
- #: views/packages/main/s2.scan3.php:732
2202
- msgid "Copied to Clipboard!"
2203
- msgstr ""
2204
-
2205
- #: views/packages/main/s2.scan3.php:734
2206
- msgid "Manual copy of selected text required on this browser."
2207
- msgstr ""
2208
-
2209
- #: views/packages/main/s2.scan3.php:741
2210
- msgid "Initializing Please Wait..."
2211
- msgstr ""
2212
-
2213
- #: views/packages/main/s2.scan3.php:784 views/packages/main/s2.scan3.php:791
2214
- msgid ""
2215
- "Error applying filters. Please go back to Step 1 to add filter manually!"
2216
- msgstr ""
2217
-
2218
- #: views/packages/main/s2.scan3.php:867
2219
- msgid "Unable to report on any tables"
2220
- msgstr ""
2221
-
2222
- #: views/packages/main/s2.scan3.php:893
2223
- msgid "Unable to report on database stats"
2224
- msgstr ""
2225
-
2226
- #: views/packages/main/s3.build.php:16
2227
- msgid "Help review the plugin"
2228
- msgstr ""
2229
-
2230
- #: views/packages/main/s3.build.php:19
2231
- msgid "Want more power? Try"
2232
- msgstr ""
2233
-
2234
- #: views/packages/main/s3.build.php:84
2235
- msgid "Step 3: Build Package"
2236
- msgstr ""
2237
-
2238
- #: views/packages/main/s3.build.php:114
2239
- msgid "Building Package"
2240
- msgstr ""
2241
-
2242
- #: views/packages/main/s3.build.php:117
2243
- msgid "Keep this window open and do not close during the build process."
2244
- msgstr ""
2245
-
2246
- #: views/packages/main/s3.build.php:118
2247
- msgid "This may take several minutes to complete."
2248
- msgstr ""
2249
-
2250
- #: views/packages/main/s3.build.php:122
2251
- msgid "Build Status"
2252
- msgstr ""
2253
-
2254
- #: views/packages/main/s3.build.php:129
2255
- msgid "Package Completed"
2256
- msgstr ""
2257
-
2258
- #: views/packages/main/s3.build.php:134
2259
- msgid "Process Time"
2260
- msgstr ""
2261
-
2262
- #: views/packages/main/s3.build.php:140
2263
- msgid "Download Files"
2264
- msgstr ""
2265
-
2266
- #: views/packages/main/s3.build.php:142
2267
- msgid "Click to download installer file"
2268
- msgstr ""
2269
-
2270
- #: views/packages/main/s3.build.php:145
2271
- msgid "Click to download archive file"
2272
- msgstr ""
2273
-
2274
- #: views/packages/main/s3.build.php:151
2275
- msgid "Click to download both files"
2276
- msgstr ""
2277
-
2278
- #: views/packages/main/s3.build.php:152
2279
- msgid "One-Click Download"
2280
- msgstr ""
2281
-
2282
- #: views/packages/main/s3.build.php:155
2283
- msgid "One Click:"
2284
- msgstr ""
2285
-
2286
- #: views/packages/main/s3.build.php:156
2287
- msgid ""
2288
- "Clicking this link will open both the installer and archive download prompts "
2289
- "at the same time. On some browsers you may have to disable pop-up warnings "
2290
- "on this domain for this to work correctly."
2291
- msgstr ""
2292
-
2293
- #: views/packages/main/s3.build.php:164
2294
- msgid "How do I install this Package?"
2295
- msgstr ""
2296
-
2297
- #: views/packages/main/s3.build.php:176
2298
- msgid "Host Build Interrupt"
2299
- msgstr ""
2300
-
2301
- #: views/packages/main/s3.build.php:177
2302
- msgid "This server cannot complete the build due to host setup constraints."
2303
- msgstr ""
2304
-
2305
- #: views/packages/main/s3.build.php:178
2306
- msgid ""
2307
- "To get past this hosts limitation consider the options below by clicking "
2308
- "each section."
2309
- msgstr ""
2310
-
2311
- #: views/packages/main/s3.build.php:184
2312
- msgid "Option 1: Try DupArchive"
2313
- msgstr ""
2314
-
2315
- #: views/packages/main/s3.build.php:188
2316
- msgid "OPTION 1:"
2317
- msgstr ""
2318
-
2319
- #: views/packages/main/s3.build.php:190
2320
- msgid ""
2321
- "Enable the DupArchive format which is specific to Duplicator and designed to "
2322
- "perform better on constrained budget hosts."
2323
- msgstr ""
2324
-
2325
- #: views/packages/main/s3.build.php:194
2326
- msgid ""
2327
- "Note: DupArchive on Duplicator only supports sites up to 500MB. If your "
2328
- "site is over 500MB then use a file filter on step 1 to get the size below "
2329
- "500MB or try the other options mentioned below. Alternatively, you may want "
2330
- "to consider"
2331
- msgstr ""
2332
-
2333
- #: views/packages/main/s3.build.php:200
2334
- msgid " which is capable of migrating sites much larger than 500MB."
2335
- msgstr ""
2336
-
2337
- #: views/packages/main/s3.build.php:204 views/packages/main/s3.build.php:271
2338
- msgid "Please follow these steps:"
2339
- msgstr ""
2340
-
2341
- #: views/packages/main/s3.build.php:206
2342
- msgid ""
2343
- "On the scanner step check to make sure your package is under 500MB. If not "
2344
- "see additional options below."
2345
- msgstr ""
2346
-
2347
- #: views/packages/main/s3.build.php:208
2348
- msgid ""
2349
- "Go to Duplicator &gt; Settings &gt; Packages Tab &gt; Archive Engine &gt;"
2350
- msgstr ""
2351
-
2352
- #: views/packages/main/s3.build.php:209
2353
- msgid "Enable DupArchive"
2354
- msgstr ""
2355
-
2356
- #: views/packages/main/s3.build.php:211
2357
- msgid "Build a new package using the new engine format."
2358
- msgstr ""
2359
-
2360
- #: views/packages/main/s3.build.php:215
2361
- msgid ""
2362
- "Note: The DupArchive engine will generate an archive.daf file. This file is "
2363
- "very similar to a .zip except that it can only be extracted by the installer."
2364
- "php file or the"
2365
- msgstr ""
2366
-
2367
- #: views/packages/main/s3.build.php:217
2368
- msgid "commandline extraction tool"
2369
- msgstr ""
2370
-
2371
- #: views/packages/main/s3.build.php:225
2372
- msgid "Option 2: File Filters"
2373
- msgstr ""
2374
-
2375
- #: views/packages/main/s3.build.php:229
2376
- msgid "OPTION 2:"
2377
- msgstr ""
2378
-
2379
- #: views/packages/main/s3.build.php:231
2380
- msgid ""
2381
- "The first pass for reading files on some budget hosts maybe slow and have "
2382
- "conflicts with strict timeout settings setup by the hosting provider. In "
2383
- "these cases, it is recommended to retry the build by adding file filters to "
2384
- "larger files/directories."
2385
- msgstr ""
2386
-
2387
- #: views/packages/main/s3.build.php:236
2388
- msgid ""
2389
- "For example, you could filter out the \"/wp-content/uploads/\" folder to "
2390
- "create the package then move the files from that directory over manually. "
2391
- "If this work-flow is not desired or does not work please check-out the other "
2392
- "options below."
2393
- msgstr ""
2394
-
2395
- #: views/packages/main/s3.build.php:241
2396
- msgid "Retry Build With Filters"
2397
- msgstr ""
2398
-
2399
- #: views/packages/main/s3.build.php:247
2400
- msgid "Build Folder:"
2401
- msgstr ""
2402
-
2403
- #: views/packages/main/s3.build.php:248
2404
- msgid ""
2405
- "On some servers the build will continue to run in the background. To "
2406
- "validate if a build is still running; open the 'tmp' folder above and see if "
2407
- "the archive file is growing in size or check the main packages screen to see "
2408
- "if the package completed. If it is not then your server has strict timeout "
2409
- "constraints."
2410
- msgstr ""
2411
-
2412
- #: views/packages/main/s3.build.php:260
2413
- msgid "Option 3: Two-Part Install"
2414
- msgstr ""
2415
-
2416
- #: views/packages/main/s3.build.php:264
2417
- msgid "OPTION 3:"
2418
- msgstr ""
2419
-
2420
- #: views/packages/main/s3.build.php:266
2421
- msgid ""
2422
- "A two-part install minimizes server load and can avoid I/O and CPU issues "
2423
- "encountered on some budget hosts. With this procedure you simply build a "
2424
- "'database-only' archive, manually move the website files, and then run the "
2425
- "installer to complete the process."
2426
- msgstr ""
2427
-
2428
- #: views/packages/main/s3.build.php:270
2429
- msgid " Overview"
2430
- msgstr ""
2431
-
2432
- #: views/packages/main/s3.build.php:273
2433
- msgid "Click the button below to go back to Step 1."
2434
- msgstr ""
2435
-
2436
- #: views/packages/main/s3.build.php:274
2437
- msgid ""
2438
- "On Step 1 the \"Archive Only the Database\" checkbox will be auto checked."
2439
- msgstr ""
2440
-
2441
- #: views/packages/main/s3.build.php:276
2442
- msgid "Complete the package build and follow the "
2443
- msgstr ""
2444
-
2445
- #: views/packages/main/s3.build.php:286
2446
- msgid "Yes. I have read the above overview and would like to continue!"
2447
- msgstr ""
2448
-
2449
- #: views/packages/main/s3.build.php:288
2450
- msgid "Start Two-Part Install Process"
2451
- msgstr ""
2452
-
2453
- #: views/packages/main/s3.build.php:297
2454
- msgid "Option 4: Configure Server"
2455
- msgstr ""
2456
-
2457
- #: views/packages/main/s3.build.php:301
2458
- msgid "OPTION 4:"
2459
- msgstr ""
2460
-
2461
- #: views/packages/main/s3.build.php:302
2462
- msgid ""
2463
- "This option is available on some hosts that allow for users to adjust server "
2464
- "configurations. With this option you will be directed to an FAQ page that "
2465
- "will show various recommendations you can take to improve/unlock constraints "
2466
- "set up on this server."
2467
- msgstr ""
2468
-
2469
- #: views/packages/main/s3.build.php:308
2470
- msgid "Diagnose Server Setup"
2471
- msgstr ""
2472
-
2473
- #: views/packages/main/s3.build.php:312
2474
- msgid "RUNTIME DETAILS"
2475
- msgstr ""
2476
-
2477
- #: views/packages/main/s3.build.php:315
2478
- msgid "Allowed Runtime:"
2479
- msgstr ""
2480
-
2481
- #: views/packages/main/s3.build.php:319
2482
- msgid "PHP Max Execution"
2483
- msgstr ""
2484
-
2485
- #: views/packages/main/s3.build.php:329
2486
- msgid ""
2487
- "This value is represented in seconds. A value of 0 means no timeout limit is "
2488
- "set for PHP."
2489
- msgstr ""
2490
-
2491
- #: views/packages/main/s3.build.php:333 views/settings/packages.php:167
2492
- msgid "Mode"
2493
- msgstr ""
2494
-
2495
- #: views/packages/main/s3.build.php:339
2496
- msgid "PHP Max Execution Mode"
2497
- msgstr ""
2498
-
2499
- #: views/packages/main/s3.build.php:341
2500
- msgid ""
2501
- "If the value is [dynamic] then its possible for PHP to run longer than the "
2502
- "default. If the value is [fixed] then PHP will not be allowed to run longer "
2503
- "than the default. <br/><br/> If this value is larger than the [Allowed "
2504
- "Runtime] above then the web server has been enabled with a timeout cap and "
2505
- "is overriding the PHP max time setting."
2506
- msgstr ""
2507
-
2508
- #: views/packages/main/s3.build.php:362
2509
- msgid "Read Package Log File"
2510
- msgstr ""
2511
-
2512
- #: views/packages/screen.php:64
2513
- msgid ""
2514
- "<b><i class='fa fa-archive'></i> Packages » All</b><br/> The 'Packages' "
2515
- "section is the main interface for managing all the packages that have been "
2516
- "created. A Package consists of two core files, the 'archive.zip' and the "
2517
- "'installer.php' file. The archive file is a zip file containing all your "
2518
- "WordPress files and a copy of your WordPress database. The installer file "
2519
- "is a php file that when browsed to via a web browser presents a wizard that "
2520
- "redeploys/installs the website by extracting the archive file and installing "
2521
- "the database. To create a package, click the 'Create New' button and "
2522
- "follow the prompts. <br/><br/><b><i class='fa fa-download'></i> Downloads</"
2523
- "b><br/>To download the package files click on the Installer and Archive "
2524
- "buttons after creating a package. The archive file will have a copy of the "
2525
- "installer inside of it named installer-backup.php in case the original "
2526
- "installer file is lost. To see the details of a package click on the <i "
2527
- "class='fa fa-archive'></i> details button.<br/><br/><b><i class='far fa-file-"
2528
- "archive'></i> Archive Types</b><br/>An archive file can be saved as either "
2529
- "a .zip file or .daf file. A zip file is a common archive format used to "
2530
- "compress and group files. The daf file short for 'Duplicator Archive "
2531
- "Format' is a custom format used specifically for working with larger "
2532
- "packages and scale-ability issues on many shared hosting platforms. Both "
2533
- "formats work very similar. The main difference is that the daf file can "
2534
- "only be extracted using the installer.php file or the <a href='https://"
2535
- "snapcreek.com/duplicator/docs/faqs-tech/#faq-trouble-052-q' "
2536
- "target='_blank'>DAF extraction tool</a>. The zip file can be used by the "
2537
- "installer.php or other zip tools like winrar/7zip/winzip or other client-"
2538
- "side tools. <br/><br/>"
2539
- msgstr ""
2540
-
2541
- #: views/packages/screen.php:85
2542
- msgid ""
2543
- "<b>Packages New » 1 Setup</b> <br/>The setup step allows for optional "
2544
- "filtered directory paths, files, file extensions and database tables. To "
2545
- "filter specific system files, click the 'Enable File Filters' checkbox and "
2546
- "add the full path of the file or directory, followed by a semicolon. For a "
2547
- "file extension add the name (i.e. 'zip') followed by a semicolon. <br/><br/"
2548
- ">To exclude a database table, check the box labeled 'Enable Table Filters' "
2549
- "and check the table name to exclude. To include only a copy of your database "
2550
- "in the archive file check the box labeled 'Archive Only the Database'. The "
2551
- "installer.php file can optionally be pre-filled with data at install time "
2552
- "but is not required. <br/><br/>"
2553
- msgstr ""
2554
-
2555
- #: views/packages/screen.php:97
2556
- msgid ""
2557
- "<b>Packages » 2 Scan</b> <br/>The plugin will scan your system files and "
2558
- "database to let you know if there are any concerns or issues that may be "
2559
- "present. All items in green mean the checks looked good. All items in red "
2560
- "indicate a warning. Warnings will not prevent the build from running, "
2561
- "however if you do run into issues with the build then investigating the "
2562
- "warnings should be considered. Click on each section for more details about "
2563
- "each scan check. <br/><br/>"
2564
- msgstr ""
2565
-
2566
- #: views/packages/screen.php:105
2567
- msgid ""
2568
- "<b>Packages » 3 Build</b> <br/>The final step in the build process where the "
2569
- "installer script and archive of the website can be downloaded. To start "
2570
- "the install process follow these steps: <ol><li>Download the installer.php "
2571
- "and archive.zip files to your local computer.</li><li>For localhost installs "
2572
- "be sure you have PHP, Apache & MySQL installed on your local computer with "
2573
- "software such as XAMPP, Instant WordPress or MAMP for MAC. Place the package."
2574
- "zip and installer.php into any empty directory under your webroot then "
2575
- "browse to the installer.php via your web browser to launch the install "
2576
- "wizard.</li><li>For remote installs use FTP or cPanel to upload both the "
2577
- "archive.zip and installer.php to your hosting provider. Place the files in a "
2578
- "new empty directory under your host's webroot accessible from a valid URL "
2579
- "such as http://your-domain/your-wp-directory/installer.php to launch the "
2580
- "install wizard. On some hosts the root directory will be a something like "
2581
- "public_html -or- www. If your're not sure contact your hosting provider. </"
2582
- "li></ol>For complete instructions see:<br/>\n"
2583
- "\t\t\t\t\t<a href='https://snapcreek.com/duplicator/docs/quick-start/?"
2584
- "utm_source=duplicator_free&amp;utm_medium=wordpress_plugin&amp;"
2585
- "utm_content=package_built_install_help&amp;"
2586
- "utm_campaign=duplicator_free#quick-040-q' target='_blank'>\n"
2587
- "\t\t\t\t\tHow do I install this Package?</a><br/><br/>"
2588
- msgstr ""
2589
-
2590
- #: views/packages/screen.php:122
2591
- msgid ""
2592
- "<b>Packages » Details</b> <br/>The details view will give you a full break-"
2593
- "down of the package including any errors that may have occured during the "
2594
- "install. <br/><br/>"
2595
- msgstr ""
2596
-
2597
- #: views/settings/about-info.php:49
2598
- msgid ""
2599
- "Duplicator can streamline your workflow and quickly clone/migrate a "
2600
- "WordPress site. The plugin helps admins, designers and developers speed up "
2601
- "the migration process of moving a WordPress site. Please help us continue "
2602
- "development by giving the plugin a 5 star."
2603
- msgstr ""
2604
-
2605
- #: views/settings/about-info.php:58
2606
- msgid "Rate Duplicator"
2607
- msgstr ""
2608
-
2609
- #: views/settings/about-info.php:69
2610
- msgid "Support Duplicator"
2611
- msgstr ""
2612
-
2613
- #: views/settings/about-info.php:71
2614
- msgid "with a 5 star review!"
2615
- msgstr ""
2616
-
2617
- #: views/settings/about-info.php:85
2618
- msgid "Spread the Word"
2619
- msgstr ""
2620
-
2621
- #: views/settings/about-info.php:92
2622
- msgid "Facebook"
2623
- msgstr ""
2624
-
2625
- #: views/settings/about-info.php:95
2626
- msgid "Twitter"
2627
- msgstr ""
2628
-
2629
- #: views/settings/about-info.php:98
2630
- msgid "LinkedIn"
2631
- msgstr ""
2632
-
2633
- #: views/settings/about-info.php:101
2634
- msgid "Google+"
2635
- msgstr ""
2636
-
2637
- #: views/settings/about-info.php:120
2638
- msgid "Stay in the Loop"
2639
- msgstr ""
2640
-
2641
- #: views/settings/about-info.php:130
2642
- msgid ""
2643
- "Subscribe to the Duplicator newsletter and stay on top of great ideas, "
2644
- "tutorials, and better ways to improve your workflows"
2645
- msgstr ""
2646
-
2647
- #: views/settings/controller.php:24
2648
- msgid "Schedules"
2649
- msgstr ""
2650
-
2651
- #: views/settings/controller.php:26
2652
- msgid "License"
2653
- msgstr ""
2654
-
2655
- #: views/settings/controller.php:27
2656
- msgid "About"
2657
- msgstr ""
2658
-
2659
- #: views/settings/general.php:8
2660
- msgid "General Settings Saved"
2661
- msgstr ""
2662
-
2663
- #: views/settings/general.php:88
2664
- msgid "Plugin"
2665
- msgstr ""
2666
-
2667
- #: views/settings/general.php:92 views/tools/diagnostics/inc.settings.php:91
2668
- #: views/tools/diagnostics/inc.settings.php:110
2669
- #: views/tools/diagnostics/inc.settings.php:183
2670
- msgid "Version"
2671
- msgstr ""
2672
-
2673
- #: views/settings/general.php:99
2674
- msgid "Uninstall"
2675
- msgstr ""
2676
-
2677
- #: views/settings/general.php:102
2678
- msgid "Delete Plugin Settings"
2679
- msgstr ""
2680
-
2681
- #: views/settings/general.php:105
2682
- msgid "Delete Entire Storage Directory"
2683
- msgstr ""
2684
-
2685
- #: views/settings/general.php:112
2686
- msgid "Full Path"
2687
- msgstr ""
2688
-
2689
- #: views/settings/general.php:115
2690
- msgid "Disable .htaccess File In Storage Directory"
2691
- msgstr ""
2692
-
2693
- #: views/settings/general.php:117
2694
- msgid "Disable if issues occur when downloading installer/archive files."
2695
- msgstr ""
2696
-
2697
- #: views/settings/general.php:122
2698
- msgid "Custom Roles"
2699
- msgstr ""
2700
-
2701
- #: views/settings/general.php:125
2702
- msgid "Enable User Role Editor Plugin Integration"
2703
- msgstr ""
2704
-
2705
- #: views/settings/general.php:130
2706
- msgid "The User Role Editor Plugin"
2707
- msgstr ""
2708
-
2709
- #: views/settings/general.php:131 views/settings/gopro.php:46
2710
- msgid "Free"
2711
- msgstr ""
2712
-
2713
- #: views/settings/general.php:132
2714
- msgid "or"
2715
- msgstr ""
2716
-
2717
- #: views/settings/general.php:133 views/settings/gopro.php:47
2718
- msgid "Professional"
2719
- msgstr ""
2720
-
2721
- #: views/settings/general.php:134
2722
- msgid "must be installed to use"
2723
- msgstr ""
2724
-
2725
- #: views/settings/general.php:135
2726
- msgid "this feature."
2727
- msgstr ""
2728
-
2729
- #: views/settings/general.php:144
2730
- msgid "Debug"
2731
- msgstr ""
2732
-
2733
- #: views/settings/general.php:148
2734
- msgid "Debugging"
2735
- msgstr ""
2736
-
2737
- #: views/settings/general.php:151
2738
- msgid "Enable debug options throughout user interface"
2739
- msgstr ""
2740
-
2741
- #: views/settings/general.php:155
2742
- msgid "Trace Log"
2743
- msgstr ""
2744
-
2745
- #: views/settings/general.php:161
2746
- msgid ""
2747
- "Turns on detailed operation logging. Logging will occur in both PHP error "
2748
- "and local trace logs."
2749
- msgstr ""
2750
-
2751
- #: views/settings/general.php:163
2752
- msgid ""
2753
- "WARNING: Only turn on this setting when asked to by support as tracing will "
2754
- "impact performance."
2755
- msgstr ""
2756
-
2757
- #: views/settings/general.php:167
2758
- msgid "Download Trace Log"
2759
- msgstr ""
2760
-
2761
- #: views/settings/general.php:175
2762
- msgid "Advanced"
2763
- msgstr ""
2764
-
2765
- #: views/settings/general.php:182
2766
- msgid "Reset Packages"
2767
- msgstr ""
2768
-
2769
- #: views/settings/general.php:185
2770
- msgid ""
2771
- "This process will reset all packages by deleting those without a completed "
2772
- "status, reset the active package id and perform a cleanup of the build tmp "
2773
- "file."
2774
- msgstr ""
2775
-
2776
- #: views/settings/general.php:188
2777
- msgid "Reset Settings"
2778
- msgstr ""
2779
-
2780
- #: views/settings/general.php:189
2781
- msgid ""
2782
- "This action should only be used if the packages screen is having issues or a "
2783
- "build is stuck."
2784
- msgstr ""
2785
-
2786
- #: views/settings/general.php:194
2787
- msgid "Archive scan"
2788
- msgstr ""
2789
-
2790
- #: views/settings/general.php:197
2791
- msgid "Skip"
2792
- msgstr ""
2793
-
2794
- #: views/settings/general.php:199
2795
- msgid ""
2796
- "If enabled all files check on scan will be skipped before package creation. "
2797
- "In some cases, this option can be beneficial if the scan process is having "
2798
- "issues running or returning errors."
2799
- msgstr ""
2800
-
2801
- #: views/settings/general.php:205
2802
- msgid "Other Plugins/Themes JS"
2803
- msgstr ""
2804
-
2805
- #: views/settings/general.php:208 views/settings/general.php:224
2806
- msgid "Unhook them on Duplicator pages"
2807
- msgstr ""
2808
-
2809
- #: views/settings/general.php:211
2810
- msgid ""
2811
- "Check this option if other plugins/themes JavaScript files are conflicting "
2812
- "with Duplicator."
2813
- msgstr ""
2814
-
2815
- #: views/settings/general.php:215 views/settings/general.php:231
2816
- msgid ""
2817
- "Do not modify this setting unless you know the expected result or have "
2818
- "talked to support."
2819
- msgstr ""
2820
-
2821
- #: views/settings/general.php:221
2822
- msgid "Other Plugins/Themes CSS"
2823
- msgstr ""
2824
-
2825
- #: views/settings/general.php:227
2826
- msgid ""
2827
- "Check this option if other plugins/themes CSS files are conflicting with "
2828
- "Duplicator."
2829
- msgstr ""
2830
-
2831
- #: views/settings/general.php:240
2832
- msgid "Save General Settings"
2833
- msgstr ""
2834
-
2835
- #: views/settings/general.php:249
2836
- msgid "Reset Packages ?"
2837
- msgstr ""
2838
-
2839
- #: views/settings/general.php:250
2840
- msgid ""
2841
- "This will clear and reset all of the current temporary packages. Would you "
2842
- "like to continue?"
2843
- msgstr ""
2844
-
2845
- #: views/settings/general.php:251
2846
- msgid "Resetting settings, Please Wait..."
2847
- msgstr ""
2848
-
2849
- #: views/settings/general.php:254
2850
- msgid "Yes"
2851
- msgstr ""
2852
-
2853
- #: views/settings/general.php:255
2854
- msgid "No"
2855
- msgstr ""
2856
-
2857
- #: views/settings/general.php:259
2858
- msgid "AJAX ERROR!"
2859
- msgstr ""
2860
-
2861
- #: views/settings/general.php:259
2862
- msgid "Ajax request error"
2863
- msgstr ""
2864
-
2865
- #: views/settings/general.php:264 views/settings/general.php:317
2866
- msgid "RESPONSE ERROR!"
2867
- msgstr ""
2868
-
2869
- #: views/settings/general.php:307
2870
- msgid "Packages successfully reset"
2871
- msgstr ""
2872
-
2873
- #: views/settings/gopro.php:39
2874
- msgid "The simplicity of Duplicator"
2875
- msgstr ""
2876
-
2877
- #: views/settings/gopro.php:40
2878
- msgid "with power for everyone."
2879
- msgstr ""
2880
-
2881
- #: views/settings/gopro.php:45
2882
- msgid "Feature"
2883
- msgstr ""
2884
-
2885
- #: views/settings/gopro.php:50
2886
- msgid "Backup Files & Database"
2887
- msgstr ""
2888
-
2889
- #: views/settings/gopro.php:60
2890
- msgid "Database Table Filters"
2891
- msgstr ""
2892
-
2893
- #: views/settings/gopro.php:65
2894
- msgid "Migration Wizard"
2895
- msgstr ""
2896
-
2897
- #: views/settings/gopro.php:70
2898
- msgid "Scheduled Backups"
2899
- msgstr ""
2900
-
2901
- #: views/settings/gopro.php:77
2902
- msgid "Amazon S3 Storage"
2903
- msgstr ""
2904
-
2905
- #: views/settings/gopro.php:85
2906
- msgid "Dropbox Storage "
2907
- msgstr ""
2908
-
2909
- #: views/settings/gopro.php:93
2910
- msgid "Google Drive Storage"
2911
- msgstr ""
2912
-
2913
- #: views/settings/gopro.php:101
2914
- msgid "Microsoft One Drive Storage"
2915
- msgstr ""
2916
-
2917
- #: views/settings/gopro.php:109
2918
- msgid "Remote FTP/SFTP Storage"
2919
- msgstr ""
2920
-
2921
- #: views/settings/gopro.php:115
2922
- msgid "Overwrite Live Site"
2923
- msgstr ""
2924
-
2925
- #: views/settings/gopro.php:117
2926
- msgid "Overwrite Existing Site"
2927
- msgstr ""
2928
-
2929
- #: views/settings/gopro.php:118
2930
- msgid "Overwrite a live site. Makes installing super-fast!"
2931
- msgstr ""
2932
-
2933
- #: views/settings/gopro.php:124 views/settings/gopro.php:126
2934
- msgid "Large Site Support"
2935
- msgstr ""
2936
-
2937
- #: views/settings/gopro.php:127
2938
- msgid ""
2939
- "Advanced archive engine processes multi-gig sites - even on stubborn budget "
2940
- "hosts!"
2941
- msgstr ""
2942
-
2943
- #: views/settings/gopro.php:133
2944
- msgid "Multiple Archive Engines"
2945
- msgstr ""
2946
-
2947
- #: views/settings/gopro.php:138
2948
- msgid "Server Throttling"
2949
- msgstr ""
2950
-
2951
- #: views/settings/gopro.php:143
2952
- msgid "Background Processing"
2953
- msgstr ""
2954
-
2955
- #: views/settings/gopro.php:148
2956
- msgid "Installer Passwords"
2957
- msgstr ""
2958
-
2959
- #: views/settings/gopro.php:153
2960
- msgid " Regenerate Salts"
2961
- msgstr ""
2962
-
2963
- #: views/settings/gopro.php:155
2964
- msgid "Regenerate Salts"
2965
- msgstr ""
2966
-
2967
- #: views/settings/gopro.php:156
2968
- msgid ""
2969
- "Installer contains option to regenerate salts in the wp-config.php file. "
2970
- "This feature is only available with Freelancer, Business or Gold licenses."
2971
- msgstr ""
2972
-
2973
- #: views/settings/gopro.php:162 views/settings/gopro.php:164
2974
- msgid "WP-Config Control Plus"
2975
- msgstr ""
2976
-
2977
- #: views/settings/gopro.php:165
2978
- msgid "Control many wp-config.php settings right from the installer!"
2979
- msgstr ""
2980
-
2981
- #: views/settings/gopro.php:173
2982
- msgid "cPanel Database API"
2983
- msgstr ""
2984
-
2985
- #: views/settings/gopro.php:177
2986
- msgid ""
2987
- "Create the database and database user directly in the installer. No need to "
2988
- "browse to your host's cPanel application."
2989
- msgstr ""
2990
-
2991
- #: views/settings/gopro.php:183
2992
- msgid "Multisite Network Migration"
2993
- msgstr ""
2994
-
2995
- #: views/settings/gopro.php:188
2996
- msgid "Multisite Subsite &gt; Standalone"
2997
- msgstr ""
2998
-
2999
- #: views/settings/gopro.php:190
3000
- msgid "Multisite"
3001
- msgstr ""
3002
-
3003
- #: views/settings/gopro.php:191
3004
- msgid ""
3005
- "Install an individual subsite from a Multisite as a standalone site. This "
3006
- "feature is only available with Business or Gold licenses."
3007
- msgstr ""
3008
-
3009
- #: views/settings/gopro.php:198
3010
- msgid "Custom Search & Replace"
3011
- msgstr ""
3012
-
3013
- #: views/settings/gopro.php:204
3014
- msgid "Email Alerts"
3015
- msgstr ""
3016
-
3017
- #: views/settings/gopro.php:210
3018
- msgid "Manual Transfers"
3019
- msgstr ""
3020
-
3021
- #: views/settings/gopro.php:216
3022
- msgid "Active Customer Support"
3023
- msgstr ""
3024
-
3025
- #: views/settings/gopro.php:219
3026
- msgid ""
3027
- "Pro users get top priority for any requests to our support desk. In most "
3028
- "cases responses will be answered in under 24 hours."
3029
- msgstr ""
3030
-
3031
- #: views/settings/gopro.php:225
3032
- msgid "Plus Many Other Features..."
3033
- msgstr ""
3034
-
3035
- #: views/settings/gopro.php:234
3036
- msgid "Check It Out!"
3037
- msgstr ""
3038
-
3039
- #: views/settings/license.php:4
3040
- msgid "Activation"
3041
- msgstr ""
3042
-
3043
- #: views/settings/license.php:9
3044
- #, php-format
3045
- msgid "%1$sManage Licenses%2$s"
3046
- msgstr ""
3047
-
3048
- #: views/settings/license.php:14
3049
- msgid "Duplicator Free"
3050
- msgstr ""
3051
-
3052
- #: views/settings/license.php:16
3053
- msgid "Basic Features"
3054
- msgstr ""
3055
-
3056
- #: views/settings/license.php:17
3057
- msgid "Pro Features"
3058
- msgstr ""
3059
-
3060
- #: views/settings/license.php:22
3061
- msgid "License Key"
3062
- msgstr ""
3063
-
3064
- #: views/settings/license.php:26
3065
- msgid "The free version of Duplicator does not require a license key. "
3066
- msgstr ""
3067
-
3068
- #: views/settings/license.php:28
3069
- msgid ""
3070
- "Professional Users: Please note that if you have already purchased the "
3071
- "Professional version it is a separate plugin that you download and install. "
3072
- "You can download the Professional version from the email sent after your "
3073
- "purchase or click on the 'Manage Licenses' link above to download the plugin "
3074
- "from your snapcreek.com dashboard. "
3075
- msgstr ""
3076
-
3077
- #: views/settings/license.php:31
3078
- msgid "If you would like to purchase the professional version you can "
3079
- msgstr ""
3080
-
3081
- #: views/settings/license.php:32
3082
- msgid "get a copy here"
3083
- msgstr ""
3084
-
3085
- #: views/settings/packages.php:8
3086
- msgid "Package Settings Saved"
3087
- msgstr ""
3088
-
3089
- #: views/settings/packages.php:74
3090
- msgid "SQL Script"
3091
- msgstr ""
3092
-
3093
- #: views/settings/packages.php:78
3094
- msgid "Mysqldump"
3095
- msgstr ""
3096
-
3097
- #: views/settings/packages.php:88
3098
- msgid "PHP Code"
3099
- msgstr ""
3100
-
3101
- #: views/settings/packages.php:98
3102
- msgid ""
3103
- "This server does not support the PHP shell_exec function which is required "
3104
- "for mysqldump to run. "
3105
- msgstr ""
3106
-
3107
- #: views/settings/packages.php:99
3108
- msgid "Please contact the host or server administrator to enable this feature."
3109
- msgstr ""
3110
-
3111
- #: views/settings/packages.php:104 views/tools/diagnostics/logging.php:180
3112
- msgid "Host Recommendation:"
3113
- msgstr ""
3114
-
3115
- #: views/settings/packages.php:105 views/tools/diagnostics/logging.php:181
3116
- msgid ""
3117
- "Duplicator recommends going with the high performance pro plan or better "
3118
- "from our recommended list"
3119
- msgstr ""
3120
-
3121
- #: views/settings/packages.php:109
3122
- msgid "Please visit our recommended"
3123
- msgstr ""
3124
-
3125
- #: views/settings/packages.php:110 views/settings/packages.php:134
3126
- #: views/tools/diagnostics/logging.php:186
3127
- msgid "host list"
3128
- msgstr ""
3129
-
3130
- #: views/settings/packages.php:111
3131
- msgid "for reliable access to mysqldump"
3132
- msgstr ""
3133
-
3134
- #: views/settings/packages.php:122
3135
- msgid "Successfully Found:"
3136
- msgstr ""
3137
-
3138
- #: views/settings/packages.php:129
3139
- msgid ""
3140
- "Mysqldump was not found at its default location or the location provided. "
3141
- "Please enter a custom path to a valid location where mysqldump can run. If "
3142
- "the problem persist contact your host or server administrator. "
3143
- msgstr ""
3144
-
3145
- #: views/settings/packages.php:133
3146
- msgid "See the"
3147
- msgstr ""
3148
-
3149
- #: views/settings/packages.php:135
3150
- msgid "for reliable access to mysqldump."
3151
- msgstr ""
3152
-
3153
- #: views/settings/packages.php:141
3154
- msgid "Custom Path"
3155
- msgstr ""
3156
-
3157
- #: views/settings/packages.php:143
3158
- msgid "mysqldump path:"
3159
- msgstr ""
3160
-
3161
- #: views/settings/packages.php:144
3162
- msgid ""
3163
- "Add a custom path if the path to mysqldump is not properly detected. For "
3164
- "all paths use a forward slash as the path seperator. On Linux systems use "
3165
- "mysqldump for Windows systems use mysqldump.exe. If the path tried does not "
3166
- "work please contact your hosting provider for details on the correct path."
3167
- msgstr ""
3168
-
3169
- #: views/settings/packages.php:148
3170
- msgid "/usr/bin/mypath/mysqldump"
3171
- msgstr ""
3172
-
3173
- #: views/settings/packages.php:152
3174
- msgid ""
3175
- "<i class=\"fa fa-exclamation-triangle fa-sm\"></i> The custom path provided "
3176
- "is not recognized as a valid mysqldump file:<br/>"
3177
- msgstr ""
3178
-
3179
- #: views/settings/packages.php:170
3180
- msgid "Single-Threaded"
3181
- msgstr ""
3182
-
3183
- #: views/settings/packages.php:173
3184
- msgid "Multi-Threaded"
3185
- msgstr ""
3186
-
3187
- #: views/settings/packages.php:177
3188
- msgid "PHP Code Mode:"
3189
- msgstr ""
3190
-
3191
- #: views/settings/packages.php:179
3192
- msgid ""
3193
- "Single-Threaded mode attempts to create the entire database script in one "
3194
- "request. Multi-Threaded mode allows the database script to be chunked over "
3195
- "multiple requests. Multi-Threaded mode is typically slower but much more "
3196
- "reliable especially for larger databases."
3197
- msgstr ""
3198
-
3199
- #: views/settings/packages.php:181
3200
- msgid "<br><br><i>Multi-Threaded mode is only available in Duplicator Pro.</i>"
3201
- msgstr ""
3202
-
3203
- #: views/settings/packages.php:184
3204
- msgid "Query Limit Size"
3205
- msgstr ""
3206
-
3207
- #: views/settings/packages.php:194
3208
- msgid "PHP Query Limit Size"
3209
- msgstr ""
3210
-
3211
- #: views/settings/packages.php:195
3212
- msgid ""
3213
- "A higher limit size will speed up the database build time, however it will "
3214
- "use more memory. If your host has memory caps start off low."
3215
- msgstr ""
3216
-
3217
- #: views/settings/packages.php:213
3218
- msgid "ZipArchive"
3219
- msgstr ""
3220
-
3221
- #: views/settings/packages.php:219
3222
- msgid "DupArchive"
3223
- msgstr ""
3224
-
3225
- #: views/settings/packages.php:228
3226
- msgid "Creates a archive format (archive.zip)."
3227
- msgstr ""
3228
-
3229
- #: views/settings/packages.php:229
3230
- msgid ""
3231
- "This option uses the internal PHP ZipArchive classes to create a Zip file."
3232
- msgstr ""
3233
-
3234
- #: views/settings/packages.php:238
3235
- msgid "Creates a custom archive format (archive.daf)."
3236
- msgstr ""
3237
-
3238
- #: views/settings/packages.php:239
3239
- msgid ""
3240
- "This option is recommended for large sites or sites on constrained servers."
3241
- msgstr ""
3242
-
3243
- #: views/settings/packages.php:246
3244
- msgid "Archive Flush"
3245
- msgstr ""
3246
-
3247
- #: views/settings/packages.php:249
3248
- msgid "Attempt Network Keep Alive"
3249
- msgstr ""
3250
-
3251
- #: views/settings/packages.php:250
3252
- msgid "enable only for large archives"
3253
- msgstr ""
3254
-
3255
- #: views/settings/packages.php:253
3256
- msgid ""
3257
- "This will attempt to keep a network connection established for large "
3258
- "archives."
3259
- msgstr ""
3260
-
3261
- #: views/settings/packages.php:254
3262
- msgid " Valid only when Archive Engine for ZipArchive is enabled."
3263
- msgstr ""
3264
-
3265
- #: views/settings/packages.php:261
3266
- msgid "Visual"
3267
- msgstr ""
3268
-
3269
- #: views/settings/packages.php:265
3270
- msgid "Created Format"
3271
- msgstr ""
3272
-
3273
- #: views/settings/packages.php:269
3274
- msgid "By Year"
3275
- msgstr ""
3276
-
3277
- #: views/settings/packages.php:276
3278
- msgid "By Month"
3279
- msgstr ""
3280
-
3281
- #: views/settings/packages.php:283
3282
- msgid "By Day"
3283
- msgstr ""
3284
-
3285
- #: views/settings/packages.php:291
3286
- msgid ""
3287
- "The UTC date format shown in the 'Created' column on the Packages screen."
3288
- msgstr ""
3289
-
3290
- #: views/settings/packages.php:292
3291
- msgid ""
3292
- "To use WordPress timezone formats consider an upgrade to Duplicator Pro."
3293
- msgstr ""
3294
-
3295
- #: views/settings/packages.php:301
3296
- msgid "Save Package Settings"
3297
- msgstr ""
3298
-
3299
- #: views/settings/schedule.php:14 views/tools/templates.php:15
3300
- msgid "This option is available in Duplicator Pro."
3301
- msgstr ""
3302
-
3303
- #: views/settings/schedule.php:15
3304
- msgid ""
3305
- "Create robust schedules that automatically create packages while you sleep."
3306
- msgstr ""
3307
-
3308
- #: views/settings/schedule.php:17
3309
- msgid "Simply choose your storage location and when you want it to run."
3310
- msgstr ""
3311
-
3312
- #: views/settings/storage.php:15
3313
- msgid "Store your packages in multiple locations with Duplicator Pro"
3314
- msgstr ""
3315
-
3316
- #: views/settings/storage.php:20
3317
- msgid " Dropbox"
3318
- msgstr ""
3319
-
3320
- #: views/settings/storage.php:28
3321
- msgid ""
3322
- "Set up a one-time storage location and automatically <br/> push the package "
3323
- "to your destination."
3324
- msgstr ""
3325
-
3326
- #: views/tools/controller.php:22
3327
- msgid "Diagnostics"
3328
- msgstr ""
3329
-
3330
- #: views/tools/controller.php:23
3331
- msgid "Templates"
3332
- msgstr ""
3333
-
3334
- #: views/tools/diagnostics/inc.data.php:11
3335
- msgid "Stored Data"
3336
- msgstr ""
3337
-
3338
- #: views/tools/diagnostics/inc.data.php:16
3339
- msgid "Data Cleanup"
3340
- msgstr ""
3341
-
3342
- #: views/tools/diagnostics/inc.data.php:21
3343
- msgid "Remove Installation Files"
3344
- msgstr ""
3345
-
3346
- #: views/tools/diagnostics/inc.data.php:25
3347
- msgid "Removes all reserved installer files."
3348
- msgstr ""
3349
-
3350
- #: views/tools/diagnostics/inc.data.php:30
3351
- msgid ""
3352
- "Clicking on the 'Remove Installation Files' button will attempt to remove "
3353
- "the installer files used by Duplicator. These files should not be left on "
3354
- "production systems for security reasons. Below are the files that should be "
3355
- "removed."
3356
- msgstr ""
3357
-
3358
- #: views/tools/diagnostics/inc.data.php:45
3359
- msgid "Clear Build Cache"
3360
- msgstr ""
3361
-
3362
- #: views/tools/diagnostics/inc.data.php:48
3363
- msgid "Removes all build data from:"
3364
- msgstr ""
3365
-
3366
- #: views/tools/diagnostics/inc.data.php:53
3367
- msgid "Options Values"
3368
- msgstr ""
3369
-
3370
- #: views/tools/diagnostics/inc.data.php:87
3371
- msgid "Delete Option?"
3372
- msgstr ""
3373
-
3374
- #: views/tools/diagnostics/inc.data.php:88
3375
- msgid "Delete the option value just selected?"
3376
- msgstr ""
3377
-
3378
- #: views/tools/diagnostics/inc.data.php:89
3379
- msgid "Removing Option, Please Wait..."
3380
- msgstr ""
3381
-
3382
- #: views/tools/diagnostics/inc.data.php:94
3383
- msgid "Clear Build Cache?"
3384
- msgstr ""
3385
-
3386
- #: views/tools/diagnostics/inc.data.php:95
3387
- msgid ""
3388
- "This process will remove all build cache files. Be sure no packages are "
3389
- "currently building or else they will be cancelled."
3390
- msgstr ""
3391
-
3392
- #: views/tools/diagnostics/inc.data.php:107
3393
- msgid "Delete the option value"
3394
- msgstr ""
3395
-
3396
- #: views/tools/diagnostics/inc.phpinfo.php:17
3397
- msgid "PHP Information"
3398
- msgstr ""
3399
-
3400
- #: views/tools/diagnostics/inc.settings.php:5
3401
- #: views/tools/diagnostics/inc.settings.php:6
3402
- msgid "unknow"
3403
- msgstr ""
3404
-
3405
- #: views/tools/diagnostics/inc.settings.php:23
3406
- msgid "Server Settings"
3407
- msgstr ""
3408
-
3409
- #: views/tools/diagnostics/inc.settings.php:32
3410
- msgid "Duplicator Version"
3411
- msgstr ""
3412
-
3413
- #: views/tools/diagnostics/inc.settings.php:39
3414
- msgid "Operating System"
3415
- msgstr ""
3416
-
3417
- #: views/tools/diagnostics/inc.settings.php:43
3418
- msgid "Timezone"
3419
- msgstr ""
3420
-
3421
- #: views/tools/diagnostics/inc.settings.php:47
3422
- msgid "Server Time"
3423
- msgstr ""
3424
-
3425
- #: views/tools/diagnostics/inc.settings.php:59
3426
- msgid "ABSPATH"
3427
- msgstr ""
3428
-
3429
- #: views/tools/diagnostics/inc.settings.php:63
3430
- msgid "Plugins Path"
3431
- msgstr ""
3432
-
3433
- #: views/tools/diagnostics/inc.settings.php:67
3434
- msgid "Loaded PHP INI"
3435
- msgstr ""
3436
-
3437
- #: views/tools/diagnostics/inc.settings.php:71
3438
- msgid "Server IP"
3439
- msgstr ""
3440
-
3441
- #: views/tools/diagnostics/inc.settings.php:78
3442
- msgid "Can't detect"
3443
- msgstr ""
3444
-
3445
- #: views/tools/diagnostics/inc.settings.php:84
3446
- msgid "Client IP"
3447
- msgstr ""
3448
-
3449
- #: views/tools/diagnostics/inc.settings.php:95
3450
- msgid "Language"
3451
- msgstr ""
3452
-
3453
- #: views/tools/diagnostics/inc.settings.php:99
3454
- #: views/tools/diagnostics/inc.settings.php:191
3455
- msgid "Charset"
3456
- msgstr ""
3457
-
3458
- #: views/tools/diagnostics/inc.settings.php:103
3459
- msgid "Memory Limit "
3460
- msgstr ""
3461
-
3462
- #: views/tools/diagnostics/inc.settings.php:104
3463
- msgid "Max"
3464
- msgstr ""
3465
-
3466
- #: views/tools/diagnostics/inc.settings.php:122
3467
- msgid "Process"
3468
- msgstr ""
3469
-
3470
- #: views/tools/diagnostics/inc.settings.php:126
3471
- msgid "Safe Mode"
3472
- msgstr ""
3473
-
3474
- #: views/tools/diagnostics/inc.settings.php:130
3475
- msgid "On"
3476
- msgstr ""
3477
-
3478
- #: views/tools/diagnostics/inc.settings.php:130
3479
- msgid "Off"
3480
- msgstr ""
3481
-
3482
- #: views/tools/diagnostics/inc.settings.php:135
3483
- msgid "Memory Limit"
3484
- msgstr ""
3485
-
3486
- #: views/tools/diagnostics/inc.settings.php:139
3487
- msgid "Memory In Use"
3488
- msgstr ""
3489
-
3490
- #: views/tools/diagnostics/inc.settings.php:143
3491
- #: views/tools/diagnostics/inc.settings.php:152
3492
- msgid "Max Execution Time"
3493
- msgstr ""
3494
-
3495
- #: views/tools/diagnostics/inc.settings.php:153
3496
- msgid ""
3497
- "If the value shows dynamic then this means its possible for PHP to run "
3498
- "longer than the default. If the value is fixed then PHP will not be allowed "
3499
- "to run longer than the default."
3500
- msgstr ""
3501
-
3502
- #: views/tools/diagnostics/inc.settings.php:158
3503
- msgid "Shell Exec"
3504
- msgstr ""
3505
-
3506
- #: views/tools/diagnostics/inc.settings.php:159
3507
- #: views/tools/diagnostics/inc.settings.php:163
3508
- msgid "Is Supported"
3509
- msgstr ""
3510
-
3511
- #: views/tools/diagnostics/inc.settings.php:159
3512
- #: views/tools/diagnostics/inc.settings.php:163
3513
- msgid "Not Supported"
3514
- msgstr ""
3515
-
3516
- #: views/tools/diagnostics/inc.settings.php:162
3517
- msgid "Shell Exec Zip"
3518
- msgstr ""
3519
-
3520
- #: views/tools/diagnostics/inc.settings.php:166
3521
- msgid "Suhosin Extension"
3522
- msgstr ""
3523
-
3524
- #: views/tools/diagnostics/inc.settings.php:170
3525
- msgid "Architecture "
3526
- msgstr ""
3527
-
3528
- #: views/tools/diagnostics/inc.settings.php:176
3529
- msgid "Error Log File "
3530
- msgstr ""
3531
-
3532
- #: views/tools/diagnostics/inc.settings.php:187
3533
- msgid "Comments"
3534
- msgstr ""
3535
-
3536
- #: views/tools/diagnostics/inc.settings.php:195
3537
- msgid "Wait Timeout"
3538
- msgstr ""
3539
-
3540
- #: views/tools/diagnostics/inc.settings.php:199
3541
- msgid "Max Allowed Packets"
3542
- msgstr ""
3543
-
3544
- #: views/tools/diagnostics/inc.settings.php:203
3545
- msgid "msyqldump Path"
3546
- msgstr ""
3547
-
3548
- #: views/tools/diagnostics/inc.settings.php:207
3549
- msgid "Server Disk"
3550
- msgstr ""
3551
-
3552
- #: views/tools/diagnostics/inc.settings.php:210
3553
- msgid "Free space"
3554
- msgstr ""
3555
-
3556
- #: views/tools/diagnostics/inc.settings.php:213
3557
- msgid "Note: This value is the physical servers hard-drive allocation."
3558
- msgstr ""
3559
-
3560
- #: views/tools/diagnostics/inc.settings.php:214
3561
- msgid ""
3562
- "On shared hosts check your control panel for the 'TRUE' disk space quota "
3563
- "value."
3564
- msgstr ""
3565
-
3566
- #: views/tools/diagnostics/inc.validator.php:16
3567
- msgid "Run Validator"
3568
- msgstr ""
3569
-
3570
- #: views/tools/diagnostics/inc.validator.php:17
3571
- msgid ""
3572
- "This will run the scan validation check. This may take several minutes. Do "
3573
- "you want to Continue?"
3574
- msgstr ""
3575
-
3576
- #: views/tools/diagnostics/inc.validator.php:28
3577
- msgid "Scan Validator"
3578
- msgstr ""
3579
-
3580
- #: views/tools/diagnostics/inc.validator.php:33
3581
- msgid ""
3582
- "This utility will help to find unreadable files and sys-links in your "
3583
- "environment that can lead to issues during the scan process. "
3584
- msgstr ""
3585
-
3586
- #: views/tools/diagnostics/inc.validator.php:34
3587
- msgid ""
3588
- "The utility will also shows how many files and directories you have in your "
3589
- "system. This process may take several minutes to run. "
3590
- msgstr ""
3591
-
3592
- #: views/tools/diagnostics/inc.validator.php:35
3593
- msgid ""
3594
- "If there is a recursive loop on your system then the process has a built in "
3595
- "check to stop after a large set of files and directories have been scanned. "
3596
- msgstr ""
3597
-
3598
- #: views/tools/diagnostics/inc.validator.php:36
3599
- msgid ""
3600
- "A message will show indicated that that a scan depth has been reached. If "
3601
- "you have issues with the package scanner (step 2) during the build process "
3602
- "then try to add The paths below to your file filters to allow the scanner to "
3603
- "finish."
3604
- msgstr ""
3605
-
3606
- #: views/tools/diagnostics/inc.validator.php:43
3607
- #: views/tools/diagnostics/inc.validator.php:153
3608
- msgid "Run Scan Integrity Validation"
3609
- msgstr ""
3610
-
3611
- #: views/tools/diagnostics/inc.validator.php:77
3612
- msgid "Note: Symlinks are not discoverable on Windows OS with PHP"
3613
- msgstr ""
3614
-
3615
- #: views/tools/diagnostics/inc.validator.php:122
3616
- msgid "Scanning Environment... This may take a few minutes."
3617
- msgstr ""
3618
-
3619
- #: views/tools/diagnostics/information.php:25
3620
- msgid "File Found: Unable to remove"
3621
- msgstr ""
3622
-
3623
- #: views/tools/diagnostics/information.php:26
3624
- msgid "Removed"
3625
- msgstr ""
3626
-
3627
- #: views/tools/diagnostics/information.php:44
3628
- msgid "Installer file cleanup ran!"
3629
- msgstr ""
3630
-
3631
- #: views/tools/diagnostics/information.php:48
3632
- msgid "Build cache removed."
3633
- msgstr ""
3634
-
3635
- #: views/tools/diagnostics/information.php:125
3636
- msgid "No Duplicator installer files found on this WordPress Site."
3637
- msgstr ""
3638
-
3639
- #: views/tools/diagnostics/information.php:132
3640
- msgid "Security Notes"
3641
- msgstr ""
3642
-
3643
- #: views/tools/diagnostics/information.php:133
3644
- msgid ""
3645
- "If the installer files do not successfully get removed with this action, "
3646
- "then they WILL need to be removed manually through your hosts control panel "
3647
- "or FTP. Please remove all installer files to avoid any security issues on "
3648
- "this site. For more details please visit the FAQ link <a href=\"https://"
3649
- "snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-295-q\" target="
3650
- "\"_blank\">Which files need to be removed after an install?</a>"
3651
- msgstr ""
3652
-
3653
- #: views/tools/diagnostics/information.php:140
3654
- msgid "Some of the installer files did not get removed, "
3655
- msgstr ""
3656
-
3657
- #: views/tools/diagnostics/information.php:142
3658
- msgid "please retry the installer cleanup process"
3659
- msgstr ""
3660
-
3661
- #: views/tools/diagnostics/information.php:144
3662
- msgid " If this process continues please see the previous FAQ link."
3663
- msgstr ""
3664
-
3665
- #: views/tools/diagnostics/information.php:148
3666
- msgid "Help Support Duplicator"
3667
- msgstr ""
3668
-
3669
- #: views/tools/diagnostics/information.php:149
3670
- msgid ""
3671
- "The Duplicator team has worked many years to make moving a WordPress site a "
3672
- "much easier process. Show your support with a <a href=\"https://wordpress."
3673
- "org/support/plugin/duplicator/reviews/?filter=5\" target=\"_blank\">5 star "
3674
- "review</a>! We would be thrilled if you could!"
3675
- msgstr ""
3676
-
3677
- #: views/tools/diagnostics/information.php:159
3678
- msgid "Please test the entire site to validate the migration process!"
3679
- msgstr ""
3680
-
3681
- #: views/tools/diagnostics/information.php:165
3682
- msgid ""
3683
- "NOTICE: Safe mode (Basic) was enabled during install, be sure to re-enable "
3684
- "all your plugins."
3685
- msgstr ""
3686
-
3687
- #: views/tools/diagnostics/information.php:170
3688
- msgid ""
3689
- "NOTICE: Safe mode (Advanced) was enabled during install, be sure to re-"
3690
- "enable all your plugins."
3691
- msgstr ""
3692
-
3693
- #: views/tools/diagnostics/information.php:212
3694
- msgid "Plugin settings reset."
3695
- msgstr ""
3696
-
3697
- #: views/tools/diagnostics/information.php:213
3698
- msgid "View state settings reset."
3699
- msgstr ""
3700
-
3701
- #: views/tools/diagnostics/information.php:214
3702
- msgid "Active package settings reset."
3703
- msgstr ""
3704
-
3705
- #: views/tools/diagnostics/logging.php:166
3706
- msgid "Log file not found or unreadable"
3707
- msgstr ""
3708
-
3709
- #: views/tools/diagnostics/logging.php:167
3710
- msgid ""
3711
- "Try to create a package, since no log files were found in the snapshots "
3712
- "directory with the extension *.log"
3713
- msgstr ""
3714
-
3715
- #: views/tools/diagnostics/logging.php:168
3716
- msgid "Reasons for log file not showing"
3717
- msgstr ""
3718
-
3719
- #: views/tools/diagnostics/logging.php:169
3720
- msgid "The web server does not support returning .log file extentions"
3721
- msgstr ""
3722
-
3723
- #: views/tools/diagnostics/logging.php:170
3724
- msgid ""
3725
- "The snapshots directory does not have the correct permissions to write "
3726
- "files. Try setting the permissions to 755"
3727
- msgstr ""
3728
-
3729
- #: views/tools/diagnostics/logging.php:171
3730
- msgid ""
3731
- "The process that PHP runs under does not have enough permissions to create "
3732
- "files. Please contact your hosting provider for more details"
3733
- msgstr ""
3734
-
3735
- #: views/tools/diagnostics/logging.php:185
3736
- msgid "Consider our recommended"
3737
- msgstr ""
3738
-
3739
- #: views/tools/diagnostics/logging.php:187
3740
- msgid "if you’re unhappy with your current provider"
3741
- msgstr ""
3742
-
3743
- #: views/tools/diagnostics/logging.php:191
3744
- #: views/tools/diagnostics/logging.php:196
3745
- msgid "Options"
3746
- msgstr ""
3747
-
3748
- #: views/tools/diagnostics/logging.php:198
3749
- msgid "Refresh"
3750
- msgstr ""
3751
-
3752
- #: views/tools/diagnostics/logging.php:201
3753
- msgid "Auto Refresh"
3754
- msgstr ""
3755
-
3756
- #: views/tools/diagnostics/logging.php:207
3757
- msgid "Package Logs"
3758
- msgstr ""
3759
-
3760
- #: views/tools/diagnostics/logging.php:208
3761
- msgid "Top 20"
3762
- msgstr ""
3763
-
3764
- #: views/tools/diagnostics/main.php:43
3765
- msgid "Information"
3766
- msgstr ""
3767
-
3768
- #: views/tools/diagnostics/main.php:44
3769
- msgid "Logs"
3770
- msgstr ""
3771
-
3772
- #: views/tools/diagnostics/support.php:32
3773
- msgid ""
3774
- "Migrating WordPress is a complex process and the logic to make all the magic "
3775
- "happen smoothly may not work quickly with every site. With over 30,000 "
3776
- "plugins and a very complex server eco-system some migrations may run into "
3777
- "issues. This is why the Duplicator includes a detailed knowledgebase that "
3778
- "can help with many common issues. Resources to additional support, approved "
3779
- "hosting, and alternatives to fit your needs can be found below."
3780
- msgstr ""
3781
-
3782
- #: views/tools/diagnostics/support.php:44
3783
- msgid "Knowledgebase"
3784
- msgstr ""
3785
-
3786
- #: views/tools/diagnostics/support.php:47
3787
- msgid "Complete Online Documentation"
3788
- msgstr ""
3789
-
3790
- #: views/tools/diagnostics/support.php:49
3791
- msgid "Choose A Section"
3792
- msgstr ""
3793
-
3794
- #: views/tools/diagnostics/support.php:50
3795
- msgid "Quick Start"
3796
- msgstr ""
3797
-
3798
- #: views/tools/diagnostics/support.php:52
3799
- msgid "User Guide"
3800
- msgstr ""
3801
-
3802
- #: views/tools/diagnostics/support.php:54
3803
- msgid "FAQs"
3804
- msgstr ""
3805
-
3806
- #: views/tools/diagnostics/support.php:56
3807
- msgid "Change Log"
3808
- msgstr ""
3809
-
3810
- #: views/tools/diagnostics/support.php:66
3811
- msgid "Online Support"
3812
- msgstr ""
3813
-
3814
- #: views/tools/diagnostics/support.php:69
3815
- msgid "Get Help From IT Professionals"
3816
- msgstr ""
3817
-
3818
- #: views/tools/diagnostics/support.php:73
3819
- msgid "Get Support!"
3820
- msgstr ""
3821
-
3822
- #: views/tools/diagnostics/support.php:87
3823
- msgid "Approved Hosting"
3824
- msgstr ""
3825
-
3826
- #: views/tools/diagnostics/support.php:90
3827
- msgid "Servers That Work With Duplicator"
3828
- msgstr ""
3829
-
3830
- #: views/tools/diagnostics/support.php:93
3831
- msgid "Trusted Providers!"
3832
- msgstr ""
3833
-
3834
- #: views/tools/diagnostics/support.php:104
3835
- msgid "Alternatives"
3836
- msgstr ""
3837
-
3838
- #: views/tools/diagnostics/support.php:107
3839
- msgid "Other Commercial Resources"
3840
- msgstr ""
3841
-
3842
- #: views/tools/diagnostics/support.php:110
3843
- msgid "Pro Solutions!"
3844
- msgstr ""
3845
-
3846
- #: views/tools/templates.php:16
3847
- msgid ""
3848
- "Templates allow you to customize what you want to include in your site and "
3849
- "store it as a re-usable profile."
3850
- msgstr ""
3851
-
3852
- #: views/tools/templates.php:18
3853
- msgid ""
3854
- "Save time and create a template that can be applied to a schedule or a "
3855
- "custom package setup."
3856
- msgstr ""
1
+ # Copyright (C) 2019 Snap Creek
2
+ # This file is distributed under the same license as the Duplicator plugin.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Duplicator 1.3.7\n"
6
+ "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/duplicator\n"
7
+ "Language-Team: \n"
8
+ "MIME-Version: 1.0\n"
9
+ "Content-Type: text/plain; charset=UTF-8\n"
10
+ "Content-Transfer-Encoding: 8bit\n"
11
+ "POT-Creation-Date: 2019-09-02 12:30+0530\n"
12
+ "PO-Revision-Date: 2019-09-02 12:45+0530\n"
13
+ "X-Generator: Poedit 2.2.3\n"
14
+ "X-Poedit-KeywordsList: __;_e;esc_html_e;esc_html__;_x;_ex;esc_attr_e;"
15
+ "esc_attr__\n"
16
+ "X-Poedit-Basepath: ..\n"
17
+ "Last-Translator: \n"
18
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
19
+ "Language: en_US\n"
20
+ "X-Poedit-SearchPath-0: .\n"
21
+
22
+ #: classes/class.logging.php:141
23
+ msgid "No Log"
24
+ msgstr ""
25
+
26
+ #: classes/class.server.php:207
27
+ msgid "(directory)"
28
+ msgstr ""
29
+
30
+ #: classes/package/class.pack.database.php:663
31
+ msgid "Please contact your DataBase administrator to fix the error."
32
+ msgstr ""
33
+
34
+ #: classes/package/class.pack.installer.php:90
35
+ msgid "Error reading DupArchive mini expander"
36
+ msgstr ""
37
+
38
+ #: classes/package/class.pack.installer.php:103
39
+ msgid "Error writing installer contents"
40
+ msgstr ""
41
+
42
+ #: classes/package/class.pack.php:309
43
+ msgid "Package name can't be empty"
44
+ msgstr ""
45
+
46
+ #: classes/package/class.pack.php:315
47
+ #, php-format
48
+ msgid "Directories: <b>%1$s</b> isn't a valid path"
49
+ msgstr ""
50
+
51
+ #: classes/package/class.pack.php:321
52
+ #, php-format
53
+ msgid "File extension: <b>%1$s</b> isn't a valid extension"
54
+ msgstr ""
55
+
56
+ #: classes/package/class.pack.php:327
57
+ #, php-format
58
+ msgid "Files: <b>%1$s</b> isn't a valid file name"
59
+ msgstr ""
60
+
61
+ #: classes/package/class.pack.php:335
62
+ #, php-format
63
+ msgid "MySQL Server Host: <b>%1$s</b> isn't a valid host"
64
+ msgstr ""
65
+
66
+ #: classes/package/class.pack.php:346
67
+ #, php-format
68
+ msgid "MySQL Server Port: <b>%1$s</b> isn't a valid port"
69
+ msgstr ""
70
+
71
+ #: classes/package/class.pack.php:845
72
+ #, php-format
73
+ msgid ""
74
+ "Can't find Scanfile %s. Please ensure there no non-English characters in the "
75
+ "package or schedule name."
76
+ msgstr ""
77
+
78
+ #: classes/package/class.pack.php:868
79
+ #, php-format
80
+ msgid "EXPECTED FILE/DIRECTORY COUNT: %1$s"
81
+ msgstr ""
82
+
83
+ #: classes/package/class.pack.php:869
84
+ #, php-format
85
+ msgid "ACTUAL FILE/DIRECTORY COUNT: %1$s"
86
+ msgstr ""
87
+
88
+ #: classes/package/class.pack.php:913
89
+ #, php-format
90
+ msgid "ERROR: Cannot open created archive. Error code = %1$s"
91
+ msgstr ""
92
+
93
+ #: classes/package/class.pack.php:918
94
+ msgid "ERROR: Archive is not valid zip archive."
95
+ msgstr ""
96
+
97
+ #: classes/package/class.pack.php:922
98
+ msgid "ERROR: Archive doesn't pass consistency check."
99
+ msgstr ""
100
+
101
+ #: classes/package/class.pack.php:927
102
+ msgid "ERROR: Archive checksum is bad."
103
+ msgstr ""
104
+
105
+ #: classes/package/class.pack.php:938
106
+ msgid "ARCHIVE CONSISTENCY TEST: Pass"
107
+ msgstr ""
108
+
109
+ #: classes/package/duparchive/class.pack.archive.duparchive.php:44
110
+ msgid ""
111
+ "Package build appears stuck so marking package as failed. Is the Max Worker "
112
+ "Time set too high?."
113
+ msgstr ""
114
+
115
+ #: classes/package/duparchive/class.pack.archive.duparchive.php:45
116
+ msgid "Build Failure"
117
+ msgstr ""
118
+
119
+ #: classes/package/duparchive/class.pack.archive.duparchive.php:83
120
+ msgid "Click on \"Resolve This\" button to fix the JSON settings."
121
+ msgstr ""
122
+
123
+ #: classes/package/duparchive/class.pack.archive.duparchive.php:95
124
+ #, php-format
125
+ msgid ""
126
+ "ERROR: Can't find Scanfile %s. Please ensure there no non-English characters "
127
+ "in the package or schedule name."
128
+ msgstr ""
129
+
130
+ #: classes/package/duparchive/class.pack.archive.duparchive.php:214
131
+ msgid "Problem adding items to archive."
132
+ msgstr ""
133
+
134
+ #: classes/package/duparchive/class.pack.archive.duparchive.php:216
135
+ msgid "Problems adding items to archive."
136
+ msgstr ""
137
+
138
+ #: classes/package/duparchive/class.pack.archive.duparchive.php:314
139
+ msgid "Critical failure present in validation"
140
+ msgstr ""
141
+
142
+ #: classes/ui/class.ui.dialog.php:95
143
+ msgid "Processing please wait..."
144
+ msgstr ""
145
+
146
+ #: classes/ui/class.ui.dialog.php:98
147
+ msgid "OK"
148
+ msgstr ""
149
+
150
+ #: classes/ui/class.ui.dialog.php:99 deactivation.php:135
151
+ msgid "Cancel"
152
+ msgstr ""
153
+
154
+ #: classes/ui/class.ui.notice.php:47
155
+ msgid "Safe Mode:"
156
+ msgstr ""
157
+
158
+ #: classes/ui/class.ui.notice.php:48
159
+ msgid ""
160
+ "During the install safe mode was enabled deactivating all plugins.<br/> "
161
+ "Please be sure to "
162
+ msgstr ""
163
+
164
+ #: classes/ui/class.ui.notice.php:49
165
+ msgid "re-activate the plugins"
166
+ msgstr ""
167
+
168
+ #: classes/ui/class.ui.notice.php:56
169
+ #: views/tools/diagnostics/information.php:158
170
+ msgid "This site has been successfully migrated!"
171
+ msgstr ""
172
+
173
+ #: classes/ui/class.ui.notice.php:57
174
+ msgid "Final step(s):"
175
+ msgstr ""
176
+
177
+ #: classes/ui/class.ui.notice.php:58
178
+ msgid ""
179
+ "This message will be removed after all installer files are removed. "
180
+ "Installer files must be removed to maintain a secure site. Click the link "
181
+ "above or button below to remove all installer files and complete the "
182
+ "migration."
183
+ msgstr ""
184
+
185
+ #: classes/ui/class.ui.notice.php:62
186
+ msgid "Remove Installation Files Now!"
187
+ msgstr ""
188
+
189
+ #: classes/ui/class.ui.notice.php:63
190
+ msgid "Optionally, Review Duplicator at WordPress.org..."
191
+ msgstr ""
192
+
193
+ #: classes/ui/class.ui.notice.php:69
194
+ msgid "Migration Almost Complete!"
195
+ msgstr ""
196
+
197
+ #: classes/ui/class.ui.notice.php:70
198
+ msgid ""
199
+ "Reserved Duplicator installation files have been detected in the root "
200
+ "directory. Please delete these installation files to avoid security issues. "
201
+ "<br/> Go to:Duplicator > Tools > Information >Stored Data and click the "
202
+ "\"Remove Installation Files\" button"
203
+ msgstr ""
204
+
205
+ #: classes/ui/class.ui.notice.php:76
206
+ msgid "Take me there now!"
207
+ msgstr ""
208
+
209
+ #: classes/ui/class.ui.notice.php:91
210
+ msgid "Redirecting Please Wait..."
211
+ msgstr ""
212
+
213
+ #: classes/ui/class.ui.notice.php:94
214
+ msgid "Invalid token permissions to perform this request."
215
+ msgstr ""
216
+
217
+ #: classes/ui/class.ui.notice.php:117
218
+ #, php-format
219
+ msgid "Activate %s"
220
+ msgstr ""
221
+
222
+ #: classes/ui/class.ui.screen.base.php:44
223
+ msgid "<b>Need Help?</b> Please check out these resources first:<ul>"
224
+ msgstr ""
225
+
226
+ #: classes/ui/class.ui.screen.base.php:52 views/settings/gopro.php:218
227
+ #: views/tools/diagnostics/main.php:45
228
+ msgid "Support"
229
+ msgstr ""
230
+
231
+ #: classes/ui/class.ui.screen.base.php:65
232
+ msgid "Resources"
233
+ msgstr ""
234
+
235
+ #: classes/ui/class.ui.screen.base.php:66
236
+ msgid "Knowledge Base"
237
+ msgstr ""
238
+
239
+ #: classes/ui/class.ui.screen.base.php:67
240
+ msgid "Full User Guide"
241
+ msgstr ""
242
+
243
+ #: classes/ui/class.ui.screen.base.php:68
244
+ msgid "Technical FAQs"
245
+ msgstr ""
246
+
247
+ #: classes/ui/class.ui.screen.base.php:69
248
+ msgid "Package Settings"
249
+ msgstr ""
250
+
251
+ #: classes/utilities/class.u.php:64
252
+ msgid "32-bit"
253
+ msgstr ""
254
+
255
+ #: classes/utilities/class.u.php:67
256
+ msgid "64-bit"
257
+ msgstr ""
258
+
259
+ #: classes/utilities/class.u.php:70
260
+ msgid "Unknown"
261
+ msgstr ""
262
+
263
+ #: classes/utilities/class.u.php:496
264
+ msgid "You do not have sufficient permissions to access this page."
265
+ msgstr ""
266
+
267
+ #: ctrls/ctrl.package.php:175
268
+ msgid "Error building DupArchive package"
269
+ msgstr ""
270
+
271
+ #: ctrls/ctrl.package.php:303
272
+ msgid ""
273
+ "An unathorized security request was made to this page. Please try again!"
274
+ msgstr ""
275
+
276
+ #: ctrls/ctrl.package.php:325
277
+ msgid "Active package object error"
278
+ msgstr ""
279
+
280
+ #: ctrls/ctrl.package.php:488 ctrls/ctrl.package.php:506
281
+ msgid "Couldn't find a local copy of the file requested."
282
+ msgstr ""
283
+
284
+ #: deactivation.php:48
285
+ msgid "Need help? We are ready to answer your questions."
286
+ msgstr ""
287
+
288
+ #: deactivation.php:48
289
+ msgid "Contact Support"
290
+ msgstr ""
291
+
292
+ #: deactivation.php:53
293
+ msgid "It's not working on my server."
294
+ msgstr ""
295
+
296
+ #: deactivation.php:55
297
+ msgid "Kindly share what didn't work so we can fix it in future updates..."
298
+ msgstr ""
299
+
300
+ #: deactivation.php:60
301
+ msgid "It's too confusing to understand."
302
+ msgstr ""
303
+
304
+ #: deactivation.php:62
305
+ msgid "Please tell us what is not clear so that we can improve it."
306
+ msgstr ""
307
+
308
+ #: deactivation.php:67
309
+ msgid "I found a different plugin that I like better."
310
+ msgstr ""
311
+
312
+ #: deactivation.php:69
313
+ msgid "What's the plugin name?"
314
+ msgstr ""
315
+
316
+ #: deactivation.php:73
317
+ msgid "It does not do what I need."
318
+ msgstr ""
319
+
320
+ #: deactivation.php:75
321
+ msgid "What does it need to do?"
322
+ msgstr ""
323
+
324
+ #: deactivation.php:79
325
+ msgid "It's a temporary deactivation, I use the plugin all the time."
326
+ msgstr ""
327
+
328
+ #: deactivation.php:85
329
+ #, php-format
330
+ msgid "I'm switching over to the %s"
331
+ msgstr ""
332
+
333
+ #: deactivation.php:85
334
+ msgid "Pro version"
335
+ msgstr ""
336
+
337
+ #: deactivation.php:128
338
+ msgid "Quick Feedback"
339
+ msgstr ""
340
+
341
+ #: deactivation.php:129
342
+ msgid "If you have a moment, please let us know why you are deactivating"
343
+ msgstr ""
344
+
345
+ #: deactivation.php:136 deactivation.php:344
346
+ msgid "Skip & Deactivate"
347
+ msgstr ""
348
+
349
+ #: deactivation.php:137
350
+ msgid "Send & Deactivate"
351
+ msgstr ""
352
+
353
+ #: deactivation.php:140
354
+ msgid "Your response is sent anonymously."
355
+ msgstr ""
356
+
357
+ #: deactivation.php:235 deactivation.php:236
358
+ msgid "Processing"
359
+ msgstr ""
360
+
361
+ #: deactivation.php:283
362
+ msgid "Please tell us the reason so we can improve it."
363
+ msgstr ""
364
+
365
+ #: duplicator.php:398 views/packages/details/controller.php:48
366
+ #: views/packages/main/packages.php:88 views/packages/main/s1.setup1.php:72
367
+ #: views/packages/main/s2.scan1.php:185 views/packages/main/s3.build.php:90
368
+ #: views/settings/controller.php:23
369
+ msgid "Packages"
370
+ msgstr ""
371
+
372
+ #: duplicator.php:404 views/tools/controller.php:19
373
+ msgid "Tools"
374
+ msgstr ""
375
+
376
+ #: duplicator.php:409 views/packages/main/packages.php:85
377
+ #: views/settings/controller.php:19 views/settings/general.php:179
378
+ msgid "Settings"
379
+ msgstr ""
380
+
381
+ #: duplicator.php:413
382
+ msgid "Go Pro!"
383
+ msgstr ""
384
+
385
+ #: duplicator.php:481 views/settings/license.php:8
386
+ msgid "Manage"
387
+ msgstr ""
388
+
389
+ #: duplicator.php:498 views/packages/main/packages.php:82
390
+ msgid "Get Help"
391
+ msgstr ""
392
+
393
+ #: duplicator.php:498
394
+ msgid "Go Pro"
395
+ msgstr ""
396
+
397
+ #: views/packages/details/controller.php:13
398
+ msgid "package log"
399
+ msgstr ""
400
+
401
+ #: views/packages/details/controller.php:14
402
+ msgid "FAQ"
403
+ msgstr ""
404
+
405
+ #: views/packages/details/controller.php:15
406
+ msgid "resources page"
407
+ msgstr ""
408
+
409
+ #: views/packages/details/controller.php:34
410
+ msgid "This package contains an error. Please review the "
411
+ msgstr ""
412
+
413
+ #: views/packages/details/controller.php:34
414
+ msgid " for details."
415
+ msgstr ""
416
+
417
+ #: views/packages/details/controller.php:35
418
+ msgid "For help visit the "
419
+ msgstr ""
420
+
421
+ #: views/packages/details/controller.php:35
422
+ msgid " and "
423
+ msgstr ""
424
+
425
+ #: views/packages/details/controller.php:42
426
+ msgid "Details"
427
+ msgstr ""
428
+
429
+ #: views/packages/details/controller.php:45
430
+ msgid "Transfer"
431
+ msgstr ""
432
+
433
+ #: views/packages/details/detail.php:63
434
+ msgid "Invalid Package ID request. Please try again!"
435
+ msgstr ""
436
+
437
+ #: views/packages/details/detail.php:75 views/settings/controller.php:22
438
+ #: views/tools/diagnostics/inc.settings.php:29
439
+ msgid "General"
440
+ msgstr ""
441
+
442
+ #: views/packages/details/detail.php:81 views/packages/details/detail.php:184
443
+ #: views/packages/main/packages.php:138 views/packages/main/s1.setup2.php:73
444
+ #: views/packages/main/s1.setup2.php:99 views/packages/main/s2.scan3.php:529
445
+ #: views/packages/main/s3.build.php:133
446
+ msgid "Name"
447
+ msgstr ""
448
+
449
+ #: views/packages/details/detail.php:85
450
+ msgid "ID"
451
+ msgstr ""
452
+
453
+ #: views/packages/details/detail.php:86
454
+ msgid "Hash"
455
+ msgstr ""
456
+
457
+ #: views/packages/details/detail.php:87
458
+ msgid "Full Name"
459
+ msgstr ""
460
+
461
+ #: views/packages/details/detail.php:92 views/packages/main/s1.setup2.php:82
462
+ #: views/packages/main/s2.scan3.php:530
463
+ msgid "Notes"
464
+ msgstr ""
465
+
466
+ #: views/packages/details/detail.php:93
467
+ msgid "- no notes -"
468
+ msgstr ""
469
+
470
+ #: views/packages/details/detail.php:96
471
+ msgid "Versions"
472
+ msgstr ""
473
+
474
+ #: views/packages/details/detail.php:100 views/packages/main/s2.scan2.php:106
475
+ msgid "WordPress"
476
+ msgstr ""
477
+
478
+ #: views/packages/details/detail.php:100 views/packages/details/detail.php:101
479
+ #: views/packages/details/detail.php:103 views/packages/details/detail.php:104
480
+ #: views/packages/details/detail.php:118
481
+ msgid "- unknown -"
482
+ msgstr ""
483
+
484
+ #: views/packages/details/detail.php:101
485
+ msgid "PHP"
486
+ msgstr ""
487
+
488
+ #: views/packages/details/detail.php:102
489
+ msgid "Mysql"
490
+ msgstr ""
491
+
492
+ #: views/packages/details/detail.php:109
493
+ msgid "Runtime"
494
+ msgstr ""
495
+
496
+ #: views/packages/details/detail.php:110
497
+ msgid "error running"
498
+ msgstr ""
499
+
500
+ #: views/packages/details/detail.php:113
501
+ msgid "Status"
502
+ msgstr ""
503
+
504
+ #: views/packages/details/detail.php:114
505
+ msgid "completed"
506
+ msgstr ""
507
+
508
+ #: views/packages/details/detail.php:114
509
+ msgid "in-complete"
510
+ msgstr ""
511
+
512
+ #: views/packages/details/detail.php:117 views/packages/details/detail.php:366
513
+ #: views/packages/main/s1.setup2.php:472
514
+ #: views/tools/diagnostics/inc.settings.php:118
515
+ msgid "User"
516
+ msgstr ""
517
+
518
+ #: views/packages/details/detail.php:121 views/packages/details/detail.php:269
519
+ #: views/packages/main/s1.setup2.php:158 views/packages/main/s2.scan3.php:28
520
+ #: views/packages/main/s2.scan3.php:586 views/packages/main/s2.scan3.php:638
521
+ msgid "Files"
522
+ msgstr ""
523
+
524
+ #: views/packages/details/detail.php:129
525
+ msgid "Log"
526
+ msgstr ""
527
+
528
+ #: views/packages/details/detail.php:130
529
+ msgid "Share"
530
+ msgstr ""
531
+
532
+ #: views/packages/details/detail.php:138 views/packages/details/detail.php:226
533
+ #: views/packages/main/packages.php:208 views/packages/main/s1.setup2.php:142
534
+ #: views/packages/main/s2.scan3.php:21 views/packages/main/s3.build.php:146
535
+ #: views/settings/packages.php:204
536
+ msgid "Archive"
537
+ msgstr ""
538
+
539
+ #: views/packages/details/detail.php:142 views/packages/details/detail.php:325
540
+ #: views/packages/main/packages.php:205 views/packages/main/s1.setup2.php:381
541
+ #: views/packages/main/s3.build.php:143
542
+ msgid "Installer"
543
+ msgstr ""
544
+
545
+ #: views/packages/details/detail.php:146 views/packages/details/detail.php:362
546
+ #: views/packages/main/s1.setup2.php:159 views/packages/main/s1.setup2.php:468
547
+ #: views/packages/main/s2.scan3.php:365 views/packages/main/s2.scan3.php:535
548
+ #: views/settings/packages.php:70
549
+ msgid "Database"
550
+ msgstr ""
551
+
552
+ #: views/packages/details/detail.php:160
553
+ msgid "Download Links"
554
+ msgstr ""
555
+
556
+ #: views/packages/details/detail.php:163
557
+ msgid "The following links contain sensitive data. Please share with caution!"
558
+ msgstr ""
559
+
560
+ #: views/packages/details/detail.php:169
561
+ msgid ""
562
+ "The database SQL script is a quick link to your database backup script. An "
563
+ "exact copy is also stored in the package."
564
+ msgstr ""
565
+
566
+ #: views/packages/details/detail.php:177 views/packages/main/s1.setup2.php:92
567
+ #: views/settings/controller.php:25 views/settings/general.php:110
568
+ msgid "Storage"
569
+ msgstr ""
570
+
571
+ #: views/packages/details/detail.php:185 views/packages/details/detail.php:286
572
+ #: views/packages/main/s1.setup2.php:100 views/settings/license.php:12
573
+ msgid "Type"
574
+ msgstr ""
575
+
576
+ #: views/packages/details/detail.php:186 views/packages/main/s1.setup2.php:101
577
+ msgid "Location"
578
+ msgstr ""
579
+
580
+ #: views/packages/details/detail.php:191 views/packages/main/s1.setup2.php:106
581
+ msgid "Default"
582
+ msgstr ""
583
+
584
+ #: views/packages/details/detail.php:192 views/packages/main/s1.setup2.php:107
585
+ msgid "Local"
586
+ msgstr ""
587
+
588
+ #: views/packages/details/detail.php:203 views/packages/main/s1.setup2.php:119
589
+ #, php-format
590
+ msgid "%1$s, %2$s, %3$s, %4$s, %5$s and other storage options available in"
591
+ msgstr ""
592
+
593
+ #: views/packages/details/detail.php:204 views/packages/main/s1.setup2.php:120
594
+ #: views/packages/main/s2.scan3.php:485 views/packages/main/s2.scan3.php:497
595
+ #: views/packages/main/s3.build.php:21
596
+ msgid "Duplicator Pro"
597
+ msgstr ""
598
+
599
+ #: views/packages/details/detail.php:206 views/packages/main/s1.setup2.php:122
600
+ msgid "Additional Storage:"
601
+ msgstr ""
602
+
603
+ #: views/packages/details/detail.php:207 views/packages/main/s1.setup2.php:123
604
+ msgid ""
605
+ "Duplicator Pro allows you to create a package and then store it at a custom "
606
+ "location on this server or to a cloud based location such as Google Drive, "
607
+ "Amazon, Dropbox or FTP."
608
+ msgstr ""
609
+
610
+ #: views/packages/details/detail.php:234 views/packages/details/detail.php:290
611
+ #: views/packages/main/s1.setup2.php:260
612
+ msgid "Build Mode"
613
+ msgstr ""
614
+
615
+ #: views/packages/details/detail.php:241
616
+ msgid "Database Mode"
617
+ msgstr ""
618
+
619
+ #: views/packages/details/detail.php:242
620
+ msgid "Archive Database Only Enabled"
621
+ msgstr ""
622
+
623
+ #: views/packages/details/detail.php:246 views/packages/details/detail.php:303
624
+ msgid "Filters"
625
+ msgstr ""
626
+
627
+ #: views/packages/details/detail.php:250 views/packages/main/s2.scan3.php:564
628
+ #: views/packages/main/s2.scan3.php:629
629
+ msgid "Directories"
630
+ msgstr ""
631
+
632
+ #: views/packages/details/detail.php:254 views/packages/details/detail.php:264
633
+ #: views/packages/details/detail.php:273 views/packages/details/detail.php:312
634
+ msgid "- no filters -"
635
+ msgstr ""
636
+
637
+ #: views/packages/details/detail.php:260 views/packages/main/s2.scan3.php:575
638
+ msgid "Extensions"
639
+ msgstr ""
640
+
641
+ #: views/packages/details/detail.php:283 views/packages/details/detail.php:395
642
+ msgid "DATABASE"
643
+ msgstr ""
644
+
645
+ #: views/packages/details/detail.php:296 views/packages/main/s2.scan3.php:546
646
+ msgid "MySQL Compatibility Mode Enabled"
647
+ msgstr ""
648
+
649
+ #: views/packages/details/detail.php:297 views/packages/main/s1.setup2.php:336
650
+ #: views/packages/main/s2.scan2.php:76 views/packages/main/s2.scan2.php:87
651
+ #: views/packages/main/s2.scan2.php:94 views/packages/main/s2.scan3.php:547
652
+ msgid "details"
653
+ msgstr ""
654
+
655
+ #: views/packages/details/detail.php:307 views/packages/main/s2.scan3.php:393
656
+ msgid "Tables"
657
+ msgstr ""
658
+
659
+ #: views/packages/details/detail.php:332
660
+ msgid " Security"
661
+ msgstr ""
662
+
663
+ #: views/packages/details/detail.php:336
664
+ msgid "Password Protection"
665
+ msgstr ""
666
+
667
+ #: views/packages/details/detail.php:345 views/packages/main/s1.setup2.php:431
668
+ msgid "Show/Hide Password"
669
+ msgstr ""
670
+
671
+ #: views/packages/details/detail.php:355 views/packages/main/s1.setup2.php:457
672
+ msgid " MySQL Server"
673
+ msgstr ""
674
+
675
+ #: views/packages/details/detail.php:358 views/packages/main/s1.setup2.php:460
676
+ msgid "Host"
677
+ msgstr ""
678
+
679
+ #: views/packages/details/detail.php:359 views/packages/details/detail.php:363
680
+ #: views/packages/details/detail.php:367
681
+ msgid "- not set -"
682
+ msgstr ""
683
+
684
+ #: views/packages/details/detail.php:375
685
+ msgid "View Package Object"
686
+ msgstr ""
687
+
688
+ #: views/packages/details/detail.php:392
689
+ msgid "Package File Links"
690
+ msgstr ""
691
+
692
+ #: views/packages/details/detail.php:396
693
+ msgid "PACKAGE"
694
+ msgstr ""
695
+
696
+ #: views/packages/details/detail.php:397
697
+ msgid "INSTALLER"
698
+ msgstr ""
699
+
700
+ #: views/packages/details/detail.php:398
701
+ msgid "LOG"
702
+ msgstr ""
703
+
704
+ #: views/packages/details/transfer.php:15
705
+ msgid "Transfer your packages to multiple locations with Duplicator Pro"
706
+ msgstr ""
707
+
708
+ #: views/packages/details/transfer.php:20 views/settings/storage.php:19
709
+ msgid "Amazon S3"
710
+ msgstr ""
711
+
712
+ #: views/packages/details/transfer.php:21
713
+ msgid "Dropbox"
714
+ msgstr ""
715
+
716
+ #: views/packages/details/transfer.php:22 views/settings/storage.php:21
717
+ msgid "Google Drive"
718
+ msgstr ""
719
+
720
+ #: views/packages/details/transfer.php:23 views/settings/storage.php:22
721
+ msgid "One Drive"
722
+ msgstr ""
723
+
724
+ #: views/packages/details/transfer.php:24 views/settings/storage.php:23
725
+ msgid "FTP &amp; SFTP"
726
+ msgstr ""
727
+
728
+ #: views/packages/details/transfer.php:25 views/settings/storage.php:24
729
+ msgid "Custom Directory"
730
+ msgstr ""
731
+
732
+ #: views/packages/details/transfer.php:29
733
+ msgid ""
734
+ "Set up a one-time storage location and automatically push the package to "
735
+ "your destination."
736
+ msgstr ""
737
+
738
+ #: views/packages/details/transfer.php:35 views/settings/schedule.php:22
739
+ #: views/settings/storage.php:34 views/tools/templates.php:23
740
+ msgid "Learn More"
741
+ msgstr ""
742
+
743
+ #: views/packages/main/controller.php:9
744
+ msgid "An invalid request was made to this page."
745
+ msgstr ""
746
+
747
+ #: views/packages/main/controller.php:10
748
+ msgid "Please retry by going to the"
749
+ msgstr ""
750
+
751
+ #: views/packages/main/controller.php:11
752
+ msgid "Packages Screen"
753
+ msgstr ""
754
+
755
+ #: views/packages/main/controller.php:59
756
+ msgid "Packages &raquo; All"
757
+ msgstr ""
758
+
759
+ #: views/packages/main/controller.php:63 views/packages/main/controller.php:67
760
+ #: views/packages/main/controller.php:71
761
+ msgid "Packages &raquo; New"
762
+ msgstr ""
763
+
764
+ #: views/packages/main/packages.php:77
765
+ msgid "Bulk Actions"
766
+ msgstr ""
767
+
768
+ #: views/packages/main/packages.php:78
769
+ msgid "Delete selected package(s)"
770
+ msgstr ""
771
+
772
+ #: views/packages/main/packages.php:78
773
+ msgid "Delete"
774
+ msgstr ""
775
+
776
+ #: views/packages/main/packages.php:80
777
+ msgid "Apply"
778
+ msgstr ""
779
+
780
+ #: views/packages/main/packages.php:98 views/packages/main/s1.setup1.php:73
781
+ #: views/packages/main/s2.scan1.php:186 views/packages/main/s3.build.php:101
782
+ msgid "Create New"
783
+ msgstr ""
784
+
785
+ #: views/packages/main/packages.php:114 views/packages/main/packages.php:148
786
+ msgid "No Packages Found."
787
+ msgstr ""
788
+
789
+ #: views/packages/main/packages.php:115 views/packages/main/packages.php:149
790
+ msgid "Click the 'Create New' button to build a package."
791
+ msgstr ""
792
+
793
+ #: views/packages/main/packages.php:117 views/packages/main/packages.php:151
794
+ msgid "New to Duplicator?"
795
+ msgstr ""
796
+
797
+ #: views/packages/main/packages.php:119 views/packages/main/packages.php:153
798
+ msgid "Check out the 'Quick Start' guide!"
799
+ msgstr ""
800
+
801
+ #: views/packages/main/packages.php:135
802
+ msgid "Select all packages"
803
+ msgstr ""
804
+
805
+ #: views/packages/main/packages.php:136
806
+ msgid "Created"
807
+ msgstr ""
808
+
809
+ #: views/packages/main/packages.php:137 views/packages/main/s2.scan3.php:88
810
+ #: views/packages/main/s2.scan3.php:392
811
+ msgid "Size"
812
+ msgstr ""
813
+
814
+ #: views/packages/main/packages.php:140 views/packages/main/s2.scan3.php:528
815
+ msgid "Package"
816
+ msgstr ""
817
+
818
+ #: views/packages/main/packages.php:189
819
+ msgid "Archive created as zip file"
820
+ msgstr ""
821
+
822
+ #: views/packages/main/packages.php:190
823
+ msgid "Archive created as daf file"
824
+ msgstr ""
825
+
826
+ #: views/packages/main/packages.php:195 views/packages/main/s1.setup2.php:148
827
+ #: views/packages/main/s2.scan3.php:35
828
+ msgid "Database Only"
829
+ msgstr ""
830
+
831
+ #: views/packages/main/packages.php:199
832
+ msgid "Package Build Running"
833
+ msgstr ""
834
+
835
+ #: views/packages/main/packages.php:200
836
+ msgid ""
837
+ "To stop or reset this package build goto Settings > Advanced > Reset Packages"
838
+ msgstr ""
839
+
840
+ #: views/packages/main/packages.php:210 views/packages/main/packages.php:228
841
+ msgid "Package Details"
842
+ msgstr ""
843
+
844
+ #: views/packages/main/packages.php:226
845
+ msgid "Error Processing"
846
+ msgstr ""
847
+
848
+ #: views/packages/main/packages.php:246
849
+ msgid "Current Server Time"
850
+ msgstr ""
851
+
852
+ #: views/packages/main/packages.php:249 views/packages/main/s3.build.php:321
853
+ msgid "Time"
854
+ msgstr ""
855
+
856
+ #: views/packages/main/packages.php:258
857
+ msgid "Items"
858
+ msgstr ""
859
+
860
+ #: views/packages/main/packages.php:268
861
+ msgid "Bulk Action Required"
862
+ msgstr ""
863
+
864
+ #: views/packages/main/packages.php:270
865
+ msgid ""
866
+ "No selections made! Please select an action from the \"Bulk Actions\" drop "
867
+ "down menu."
868
+ msgstr ""
869
+
870
+ #: views/packages/main/packages.php:274
871
+ msgid "Selection Required"
872
+ msgstr ""
873
+
874
+ #: views/packages/main/packages.php:276
875
+ msgid "No selections made! Please select at least one package to delete."
876
+ msgstr ""
877
+
878
+ #: views/packages/main/packages.php:280
879
+ msgid "Delete Packages?"
880
+ msgstr ""
881
+
882
+ #: views/packages/main/packages.php:281
883
+ msgid "Are you sure you want to delete the selected package(s)?"
884
+ msgstr ""
885
+
886
+ #: views/packages/main/packages.php:282
887
+ msgid "Removing Packages, Please Wait..."
888
+ msgstr ""
889
+
890
+ #: views/packages/main/packages.php:289
891
+ msgid "Duplicator Help"
892
+ msgstr ""
893
+
894
+ #: views/packages/main/packages.php:294
895
+ msgid "Alert!"
896
+ msgstr ""
897
+
898
+ #: views/packages/main/packages.php:295
899
+ msgid "A package is being processed. Retry later."
900
+ msgstr ""
901
+
902
+ #: views/packages/main/packages.php:302
903
+ msgid "Common Questions:"
904
+ msgstr ""
905
+
906
+ #: views/packages/main/packages.php:303
907
+ msgid "How do I create a package"
908
+ msgstr ""
909
+
910
+ #: views/packages/main/packages.php:304
911
+ msgid "How do I install a package?"
912
+ msgstr ""
913
+
914
+ #: views/packages/main/packages.php:305
915
+ msgid "Frequently Asked Questions!"
916
+ msgstr ""
917
+
918
+ #: views/packages/main/packages.php:308
919
+ msgid "Other Resources:"
920
+ msgstr ""
921
+
922
+ #: views/packages/main/packages.php:309
923
+ msgid "Need help with the plugin?"
924
+ msgstr ""
925
+
926
+ #: views/packages/main/packages.php:310
927
+ msgid "Have an idea for the plugin?"
928
+ msgstr ""
929
+
930
+ #: views/packages/main/packages.php:312
931
+ msgid "Help review the plugin!"
932
+ msgstr ""
933
+
934
+ #: views/packages/main/s1.setup1.php:12
935
+ msgid "Package settings have been reset."
936
+ msgstr ""
937
+
938
+ #: views/packages/main/s1.setup1.php:62 views/packages/main/s1.setup2.php:401
939
+ #: views/packages/main/s2.scan1.php:175 views/packages/main/s2.scan2.php:56
940
+ #: views/packages/main/s3.build.php:79
941
+ msgid "Setup"
942
+ msgstr ""
943
+
944
+ #: views/packages/main/s1.setup1.php:63 views/packages/main/s2.scan1.php:176
945
+ #: views/packages/main/s3.build.php:80
946
+ msgid "Scan"
947
+ msgstr ""
948
+
949
+ #: views/packages/main/s1.setup1.php:64 views/packages/main/s2.scan1.php:177
950
+ #: views/packages/main/s2.scan1.php:269 views/packages/main/s3.build.php:81
951
+ msgid "Build"
952
+ msgstr ""
953
+
954
+ #: views/packages/main/s1.setup1.php:67
955
+ msgid "Step 1: Package Setup"
956
+ msgstr ""
957
+
958
+ #: views/packages/main/s1.setup1.php:90
959
+ msgid "Requirements:"
960
+ msgstr ""
961
+
962
+ #: views/packages/main/s1.setup1.php:99
963
+ msgid ""
964
+ "System requirements must pass for the Duplicator to work properly. Click "
965
+ "each link for details."
966
+ msgstr ""
967
+
968
+ #: views/packages/main/s1.setup1.php:105
969
+ msgid "PHP Support"
970
+ msgstr ""
971
+
972
+ #: views/packages/main/s1.setup1.php:111 views/packages/main/s2.scan2.php:68
973
+ msgid "PHP Version"
974
+ msgstr ""
975
+
976
+ #: views/packages/main/s1.setup1.php:113
977
+ msgid "PHP versions 5.2.9+ or higher is required."
978
+ msgstr ""
979
+
980
+ #: views/packages/main/s1.setup1.php:117
981
+ msgid "Zip Archive Enabled"
982
+ msgstr ""
983
+
984
+ #: views/packages/main/s1.setup1.php:121
985
+ msgid "ZipArchive extension is required or"
986
+ msgstr ""
987
+
988
+ #: views/packages/main/s1.setup1.php:122
989
+ msgid "Switch to DupArchive"
990
+ msgstr ""
991
+
992
+ #: views/packages/main/s1.setup1.php:123
993
+ msgid "to by-pass this requirement."
994
+ msgstr ""
995
+
996
+ #: views/packages/main/s1.setup1.php:129
997
+ msgid "Safe Mode Off"
998
+ msgstr ""
999
+
1000
+ #: views/packages/main/s1.setup1.php:131
1001
+ msgid ""
1002
+ "Safe Mode should be set to Off in you php.ini file and is deprecated as of "
1003
+ "PHP 5.3.0."
1004
+ msgstr ""
1005
+
1006
+ #: views/packages/main/s1.setup1.php:134 views/packages/main/s1.setup1.php:139
1007
+ #: views/packages/main/s1.setup1.php:144
1008
+ msgid "Function"
1009
+ msgstr ""
1010
+
1011
+ #: views/packages/main/s1.setup1.php:150
1012
+ msgid ""
1013
+ "For any issues in this section please contact your hosting provider or "
1014
+ "server administrator. For additional information see our online "
1015
+ "documentation."
1016
+ msgstr ""
1017
+
1018
+ #: views/packages/main/s1.setup1.php:158
1019
+ msgid "Required Paths"
1020
+ msgstr ""
1021
+
1022
+ #: views/packages/main/s1.setup1.php:178
1023
+ msgid ""
1024
+ "If the root WordPress path is not writable by PHP on some systems this can "
1025
+ "cause issues."
1026
+ msgstr ""
1027
+
1028
+ #: views/packages/main/s1.setup1.php:181
1029
+ msgid ""
1030
+ "If Duplicator does not have enough permissions then you will need to "
1031
+ "manually create the paths above. &nbsp; "
1032
+ msgstr ""
1033
+
1034
+ #: views/packages/main/s1.setup1.php:190
1035
+ msgid "Server Support"
1036
+ msgstr ""
1037
+
1038
+ #: views/packages/main/s1.setup1.php:196
1039
+ msgid "MySQL Version"
1040
+ msgstr ""
1041
+
1042
+ #: views/packages/main/s1.setup1.php:200
1043
+ msgid "MySQLi Support"
1044
+ msgstr ""
1045
+
1046
+ #: views/packages/main/s1.setup1.php:206
1047
+ msgid ""
1048
+ "MySQL version 5.0+ or better is required and the PHP MySQLi extension (note "
1049
+ "the trailing 'i') is also required. Contact your server administrator and "
1050
+ "request that mysqli extension and MySQL Server 5.0+ be installed."
1051
+ msgstr ""
1052
+
1053
+ #: views/packages/main/s1.setup1.php:207
1054
+ #: views/tools/diagnostics/inc.data.php:26
1055
+ msgid "more info"
1056
+ msgstr ""
1057
+
1058
+ #: views/packages/main/s1.setup1.php:216
1059
+ msgid "Reserved Files"
1060
+ msgstr ""
1061
+
1062
+ #: views/packages/main/s1.setup1.php:221
1063
+ msgid ""
1064
+ "None of the reserved files where found from a previous install. This means "
1065
+ "you are clear to create a new package."
1066
+ msgstr ""
1067
+
1068
+ #: views/packages/main/s1.setup1.php:229
1069
+ msgid "WordPress Root Path:"
1070
+ msgstr ""
1071
+
1072
+ #: views/packages/main/s1.setup1.php:231
1073
+ msgid "Remove Files Now"
1074
+ msgstr ""
1075
+
1076
+ #: views/packages/main/s1.setup2.php:76
1077
+ msgid "Add Notes"
1078
+ msgstr ""
1079
+
1080
+ #: views/packages/main/s1.setup2.php:79
1081
+ msgid "Toggle a default name"
1082
+ msgstr ""
1083
+
1084
+ #: views/packages/main/s1.setup2.php:146
1085
+ msgid "File filter enabled"
1086
+ msgstr ""
1087
+
1088
+ #: views/packages/main/s1.setup2.php:147
1089
+ msgid "Database filter enabled"
1090
+ msgstr ""
1091
+
1092
+ #: views/packages/main/s1.setup2.php:148 views/packages/main/s1.setup2.php:173
1093
+ msgid "Archive Only the Database"
1094
+ msgstr ""
1095
+
1096
+ #: views/packages/main/s1.setup2.php:177
1097
+ msgid "Enable File Filters"
1098
+ msgstr ""
1099
+
1100
+ #: views/packages/main/s1.setup2.php:179
1101
+ msgid "File Filters:"
1102
+ msgstr ""
1103
+
1104
+ #: views/packages/main/s1.setup2.php:180
1105
+ msgid ""
1106
+ "File filters allow you to ignore directories and file extensions. When "
1107
+ "creating a package only include the data you want and need. This helps to "
1108
+ "improve the overall archive build time and keep your backups simple and "
1109
+ "clean."
1110
+ msgstr ""
1111
+
1112
+ #: views/packages/main/s1.setup2.php:185 views/packages/main/s1.setup2.php:199
1113
+ #: views/packages/main/s1.setup2.php:207
1114
+ msgid "Separate all filters by semicolon"
1115
+ msgstr ""
1116
+
1117
+ #: views/packages/main/s1.setup2.php:187
1118
+ msgid "Directories:"
1119
+ msgstr ""
1120
+
1121
+ #: views/packages/main/s1.setup2.php:188
1122
+ msgid "Number of directories filtered"
1123
+ msgstr ""
1124
+
1125
+ #: views/packages/main/s1.setup2.php:192
1126
+ msgid "root path"
1127
+ msgstr ""
1128
+
1129
+ #: views/packages/main/s1.setup2.php:193
1130
+ msgid "wp-uploads"
1131
+ msgstr ""
1132
+
1133
+ #: views/packages/main/s1.setup2.php:194
1134
+ msgid "cache"
1135
+ msgstr ""
1136
+
1137
+ #: views/packages/main/s1.setup2.php:195 views/packages/main/s1.setup2.php:203
1138
+ #: views/packages/main/s1.setup2.php:215
1139
+ msgid "(clear)"
1140
+ msgstr ""
1141
+
1142
+ #: views/packages/main/s1.setup2.php:199
1143
+ msgid "File extensions"
1144
+ msgstr ""
1145
+
1146
+ #: views/packages/main/s1.setup2.php:201
1147
+ msgid "media"
1148
+ msgstr ""
1149
+
1150
+ #: views/packages/main/s1.setup2.php:202
1151
+ msgid "archive"
1152
+ msgstr ""
1153
+
1154
+ #: views/packages/main/s1.setup2.php:209
1155
+ msgid "Files:"
1156
+ msgstr ""
1157
+
1158
+ #: views/packages/main/s1.setup2.php:210
1159
+ msgid "Number of files filtered"
1160
+ msgstr ""
1161
+
1162
+ #: views/packages/main/s1.setup2.php:214
1163
+ msgid "(file path)"
1164
+ msgstr ""
1165
+
1166
+ #: views/packages/main/s1.setup2.php:220
1167
+ msgid ""
1168
+ "The directory, file and extensions paths above will be excluded from the "
1169
+ "archive file if enabled is checked."
1170
+ msgstr ""
1171
+
1172
+ #: views/packages/main/s1.setup2.php:221
1173
+ msgid ""
1174
+ "Use the full path for directories and files with semicolons to separate all "
1175
+ "paths."
1176
+ msgstr ""
1177
+
1178
+ #: views/packages/main/s1.setup2.php:231
1179
+ msgid ""
1180
+ "This option has automatically been checked because you have opted for a <i "
1181
+ "class='fa fa-random'></i> Two-Part Install Process. Please complete the "
1182
+ "package build and continue with the "
1183
+ msgstr ""
1184
+
1185
+ #: views/packages/main/s1.setup2.php:234 views/packages/main/s3.build.php:279
1186
+ msgid "Quick Start Two-Part Install Instructions"
1187
+ msgstr ""
1188
+
1189
+ #: views/packages/main/s1.setup2.php:238
1190
+ msgid ""
1191
+ "<b>Overview:</b><br/> This advanced option excludes all files from the "
1192
+ "archive. Only the database and a copy of the installer.php will be included "
1193
+ "in the archive.zip file. The option can be used for backing up and moving "
1194
+ "only the database."
1195
+ msgstr ""
1196
+
1197
+ #: views/packages/main/s1.setup2.php:243
1198
+ msgid "<b><i class='fa fa-exclamation-circle'></i> Notice:</b><br/>"
1199
+ msgstr ""
1200
+
1201
+ #: views/packages/main/s1.setup2.php:245
1202
+ msgid ""
1203
+ "Please use caution when installing only the database over an existing site "
1204
+ "and be sure the correct files correspond with the database. For example, if "
1205
+ "WordPress 4.6 is on this site and you copy the database to a host that has "
1206
+ "WordPress 4.8 files then the source code of the files will not be in sync "
1207
+ "with the database causing possible errors. If you’re immediately moving the "
1208
+ "source files with the database then you can ignore this notice. Please use "
1209
+ "this advanced feature with caution!"
1210
+ msgstr ""
1211
+
1212
+ #: views/packages/main/s1.setup2.php:267
1213
+ msgid "Enable Table Filters"
1214
+ msgstr ""
1215
+
1216
+ #: views/packages/main/s1.setup2.php:269
1217
+ msgid "Enable Table Filters:"
1218
+ msgstr ""
1219
+
1220
+ #: views/packages/main/s1.setup2.php:270
1221
+ msgid ""
1222
+ "Checked tables will not be added to the database script. Excluding certain "
1223
+ "tables can possibly cause your site or plugins to not work correctly after "
1224
+ "install!"
1225
+ msgstr ""
1226
+
1227
+ #: views/packages/main/s1.setup2.php:276
1228
+ msgid "Include All"
1229
+ msgstr ""
1230
+
1231
+ #: views/packages/main/s1.setup2.php:277
1232
+ msgid "Exclude All"
1233
+ msgstr ""
1234
+
1235
+ #: views/packages/main/s1.setup2.php:321
1236
+ msgid "Checked tables will be <u>excluded</u> from the database script. "
1237
+ msgstr ""
1238
+
1239
+ #: views/packages/main/s1.setup2.php:322
1240
+ msgid ""
1241
+ "Excluding certain tables can cause your site or plugins to not work "
1242
+ "correctly after install!<br/>"
1243
+ msgstr ""
1244
+
1245
+ #: views/packages/main/s1.setup2.php:323
1246
+ msgid ""
1247
+ "<i class='core-table-info'> Use caution when excluding tables! It is highly "
1248
+ "recommended to not exclude WordPress core tables*, unless you know the "
1249
+ "impact.</i>"
1250
+ msgstr ""
1251
+
1252
+ #: views/packages/main/s1.setup2.php:328
1253
+ msgid "Compatibility Mode"
1254
+ msgstr ""
1255
+
1256
+ #: views/packages/main/s1.setup2.php:330
1257
+ msgid "Compatibility Mode:"
1258
+ msgstr ""
1259
+
1260
+ #: views/packages/main/s1.setup2.php:331
1261
+ msgid ""
1262
+ "This is an advanced database backwards compatibility feature that should "
1263
+ "ONLY be used if having problems installing packages. If the database server "
1264
+ "version is lower than the version where the package was built then these "
1265
+ "options may help generate a script that is more compliant with the older "
1266
+ "database server. It is recommended to try each option separately starting "
1267
+ "with mysql40."
1268
+ msgstr ""
1269
+
1270
+ #: views/packages/main/s1.setup2.php:352
1271
+ msgid "mysql40"
1272
+ msgstr ""
1273
+
1274
+ #: views/packages/main/s1.setup2.php:356
1275
+ msgid "no_table_options"
1276
+ msgstr ""
1277
+
1278
+ #: views/packages/main/s1.setup2.php:360
1279
+ msgid "no_key_options"
1280
+ msgstr ""
1281
+
1282
+ #: views/packages/main/s1.setup2.php:364
1283
+ msgid "no_field_options"
1284
+ msgstr ""
1285
+
1286
+ #: views/packages/main/s1.setup2.php:369
1287
+ msgid "This option is only available with mysqldump mode."
1288
+ msgstr ""
1289
+
1290
+ #: views/packages/main/s1.setup2.php:382
1291
+ msgid "Installer password protection is on"
1292
+ msgstr ""
1293
+
1294
+ #: views/packages/main/s1.setup2.php:383
1295
+ msgid "Installer password protection is off"
1296
+ msgstr ""
1297
+
1298
+ #: views/packages/main/s1.setup2.php:390
1299
+ msgid "All values in this section are"
1300
+ msgstr ""
1301
+
1302
+ #: views/packages/main/s1.setup2.php:390
1303
+ msgid "optional"
1304
+ msgstr ""
1305
+
1306
+ #: views/packages/main/s1.setup2.php:392
1307
+ msgid "Setup/Prefills"
1308
+ msgstr ""
1309
+
1310
+ #: views/packages/main/s1.setup2.php:393
1311
+ msgid ""
1312
+ "All values in this section are OPTIONAL! If you know ahead of time the "
1313
+ "database input fields the installer will use, then you can optionally enter "
1314
+ "them here and they will be prefilled at install time. Otherwise you can "
1315
+ "just enter them in at install time and ignore all these options in the "
1316
+ "Installer section."
1317
+ msgstr ""
1318
+
1319
+ #: views/packages/main/s1.setup2.php:404 views/packages/main/s1.setup2.php:409
1320
+ msgid "Branding"
1321
+ msgstr ""
1322
+
1323
+ #: views/packages/main/s1.setup2.php:407
1324
+ msgid "Available with Duplicator Pro - Freelancer!"
1325
+ msgstr ""
1326
+
1327
+ #: views/packages/main/s1.setup2.php:410
1328
+ msgid ""
1329
+ "Branding is a way to customize the installer look and feel. With branding "
1330
+ "you can create multiple brands of installers."
1331
+ msgstr ""
1332
+
1333
+ #: views/packages/main/s1.setup2.php:415
1334
+ msgid "Security"
1335
+ msgstr ""
1336
+
1337
+ #: views/packages/main/s1.setup2.php:422
1338
+ msgid "Enable Password Protection"
1339
+ msgstr ""
1340
+
1341
+ #: views/packages/main/s1.setup2.php:424
1342
+ msgid "Security:"
1343
+ msgstr ""
1344
+
1345
+ #: views/packages/main/s1.setup2.php:425
1346
+ msgid ""
1347
+ "Enabling this option will allow for basic password protection on the "
1348
+ "installer. Before running the installer the password below must be entered "
1349
+ "before proceeding with an install. This password is a general deterrent and "
1350
+ "should not be substituted for properly keeping your files secure. Be sure "
1351
+ "to remove all installer files when the install process is completed."
1352
+ msgstr ""
1353
+
1354
+ #: views/packages/main/s1.setup2.php:440
1355
+ msgid "Prefills"
1356
+ msgstr ""
1357
+
1358
+ #: views/packages/main/s1.setup2.php:448
1359
+ msgid "Basic"
1360
+ msgstr ""
1361
+
1362
+ #: views/packages/main/s1.setup2.php:449 views/settings/gopro.php:176
1363
+ msgid "cPanel"
1364
+ msgstr ""
1365
+
1366
+ #: views/packages/main/s1.setup2.php:461
1367
+ msgid "example: localhost (value is optional)"
1368
+ msgstr ""
1369
+
1370
+ #: views/packages/main/s1.setup2.php:464
1371
+ msgid "Host Port"
1372
+ msgstr ""
1373
+
1374
+ #: views/packages/main/s1.setup2.php:465
1375
+ msgid "example: 3306 (value is optional)"
1376
+ msgstr ""
1377
+
1378
+ #: views/packages/main/s1.setup2.php:469
1379
+ msgid "example: DatabaseName (value is optional)"
1380
+ msgstr ""
1381
+
1382
+ #: views/packages/main/s1.setup2.php:473
1383
+ msgid "example: DatabaseUserName (value is optional)"
1384
+ msgstr ""
1385
+
1386
+ #: views/packages/main/s1.setup2.php:483
1387
+ msgid ""
1388
+ "Create the database and database user at install time without leaving the "
1389
+ "installer!"
1390
+ msgstr ""
1391
+
1392
+ #: views/packages/main/s1.setup2.php:484
1393
+ msgid "This feature is only availble in "
1394
+ msgstr ""
1395
+
1396
+ #: views/packages/main/s1.setup2.php:485
1397
+ msgid "Duplicator Pro!"
1398
+ msgstr ""
1399
+
1400
+ #: views/packages/main/s1.setup2.php:486
1401
+ msgid "This feature works only with hosts that support cPanel."
1402
+ msgstr ""
1403
+
1404
+ #: views/packages/main/s1.setup2.php:498
1405
+ msgid "Reset"
1406
+ msgstr ""
1407
+
1408
+ #: views/packages/main/s1.setup2.php:499
1409
+ msgid "Next"
1410
+ msgstr ""
1411
+
1412
+ #: views/packages/main/s1.setup2.php:508
1413
+ msgid "Reset Package Settings?"
1414
+ msgstr ""
1415
+
1416
+ #: views/packages/main/s1.setup2.php:509
1417
+ msgid ""
1418
+ "This will clear and reset all of the current package settings. Would you "
1419
+ "like to continue?"
1420
+ msgstr ""
1421
+
1422
+ #: views/packages/main/s2.scan1.php:148
1423
+ msgid "Input fields not valid"
1424
+ msgstr ""
1425
+
1426
+ #: views/packages/main/s2.scan1.php:149 views/packages/main/s2.scan1.php:207
1427
+ msgid "Please try again!"
1428
+ msgstr ""
1429
+
1430
+ #: views/packages/main/s2.scan1.php:151 views/packages/main/s2.scan1.php:212
1431
+ #: views/packages/main/s3.build.php:353
1432
+ msgid "Error Message:"
1433
+ msgstr ""
1434
+
1435
+ #: views/packages/main/s2.scan1.php:161 views/packages/main/s2.scan1.php:267
1436
+ msgid "Back"
1437
+ msgstr ""
1438
+
1439
+ #: views/packages/main/s2.scan1.php:180
1440
+ msgid "Step 2: System Scan"
1441
+ msgstr ""
1442
+
1443
+ #: views/packages/main/s2.scan1.php:197
1444
+ msgid "Scanning Site"
1445
+ msgstr ""
1446
+
1447
+ #: views/packages/main/s2.scan1.php:199 views/packages/main/s3.build.php:116
1448
+ msgid "Please Wait..."
1449
+ msgstr ""
1450
+
1451
+ #: views/packages/main/s2.scan1.php:200
1452
+ msgid "Keep this window open during the scan process."
1453
+ msgstr ""
1454
+
1455
+ #: views/packages/main/s2.scan1.php:201
1456
+ msgid "This can take several minutes."
1457
+ msgstr ""
1458
+
1459
+ #: views/packages/main/s2.scan1.php:206
1460
+ msgid "Scan Error"
1461
+ msgstr ""
1462
+
1463
+ #: views/packages/main/s2.scan1.php:209 views/packages/main/s3.build.php:349
1464
+ msgid "Server Status:"
1465
+ msgstr ""
1466
+
1467
+ #: views/packages/main/s2.scan1.php:221
1468
+ msgid "Scan Complete"
1469
+ msgstr ""
1470
+
1471
+ #: views/packages/main/s2.scan1.php:223
1472
+ msgid "Process Time:"
1473
+ msgstr ""
1474
+
1475
+ #: views/packages/main/s2.scan1.php:239
1476
+ msgid "A notice status has been detected, are you sure you want to continue?"
1477
+ msgstr ""
1478
+
1479
+ #: views/packages/main/s2.scan1.php:243
1480
+ msgid "Yes. Continue with the build process!"
1481
+ msgstr ""
1482
+
1483
+ #: views/packages/main/s2.scan1.php:249
1484
+ msgid ""
1485
+ "Scan checks are not required to pass, however they could cause issues on "
1486
+ "some systems."
1487
+ msgstr ""
1488
+
1489
+ #: views/packages/main/s2.scan1.php:251
1490
+ msgid ""
1491
+ "Please review the details for each section by clicking on the detail title."
1492
+ msgstr ""
1493
+
1494
+ #: views/packages/main/s2.scan1.php:258
1495
+ msgid "Do you want to continue?"
1496
+ msgstr ""
1497
+
1498
+ #: views/packages/main/s2.scan1.php:260
1499
+ msgid "At least one or more checkboxes was checked in \"Quick Filters\"."
1500
+ msgstr ""
1501
+
1502
+ #: views/packages/main/s2.scan1.php:261
1503
+ msgid "To apply a \"Quick Filter\" click the \"Add Filters & Rescan\" button"
1504
+ msgstr ""
1505
+
1506
+ #: views/packages/main/s2.scan1.php:263
1507
+ msgid "Yes. Continue without applying any file filters."
1508
+ msgstr ""
1509
+
1510
+ #: views/packages/main/s2.scan1.php:268
1511
+ msgid "Rescan"
1512
+ msgstr ""
1513
+
1514
+ #: views/packages/main/s2.scan1.php:414
1515
+ msgid "Unable to perform a full scan, please try the following actions:"
1516
+ msgstr ""
1517
+
1518
+ #: views/packages/main/s2.scan1.php:415
1519
+ msgid ""
1520
+ "1. Go back and create a root path directory filter to validate the site is "
1521
+ "scan-able."
1522
+ msgstr ""
1523
+
1524
+ #: views/packages/main/s2.scan1.php:416
1525
+ msgid ""
1526
+ "2. Continue to add/remove filters to isolate which path is causing issues."
1527
+ msgstr ""
1528
+
1529
+ #: views/packages/main/s2.scan1.php:417
1530
+ msgid "3. This message will go away once the correct filters are applied."
1531
+ msgstr ""
1532
+
1533
+ #: views/packages/main/s2.scan1.php:419
1534
+ msgid "Common Issues:"
1535
+ msgstr ""
1536
+
1537
+ #: views/packages/main/s2.scan1.php:420
1538
+ msgid ""
1539
+ "- On some budget hosts scanning over 30k files can lead to timeout/gateway "
1540
+ "issues. Consider scanning only your main WordPress site and avoid trying to "
1541
+ "backup other external directories."
1542
+ msgstr ""
1543
+
1544
+ #: views/packages/main/s2.scan1.php:421
1545
+ msgid ""
1546
+ "- Symbolic link recursion can cause timeouts. Ask your server admin if any "
1547
+ "are present in the scan path. If they are add the full path as a filter and "
1548
+ "try running the scan again."
1549
+ msgstr ""
1550
+
1551
+ #: views/packages/main/s2.scan1.php:434 views/packages/main/s2.scan3.php:57
1552
+ #: views/packages/main/s2.scan3.php:68 views/packages/main/s3.build.php:245
1553
+ msgid "Notice"
1554
+ msgstr ""
1555
+
1556
+ #: views/packages/main/s2.scan1.php:436
1557
+ msgid "Good"
1558
+ msgstr ""
1559
+
1560
+ #: views/packages/main/s2.scan1.php:437
1561
+ msgid "Fail"
1562
+ msgstr ""
1563
+
1564
+ #: views/packages/main/s2.scan2.php:7
1565
+ msgid "Server"
1566
+ msgstr ""
1567
+
1568
+ #: views/packages/main/s2.scan2.php:8
1569
+ msgid "Show Diagnostics"
1570
+ msgstr ""
1571
+
1572
+ #: views/packages/main/s2.scan2.php:63
1573
+ #: views/tools/diagnostics/inc.settings.php:51
1574
+ msgid "Web Server"
1575
+ msgstr ""
1576
+
1577
+ #: views/packages/main/s2.scan2.php:64
1578
+ msgid "Supported web servers: "
1579
+ msgstr ""
1580
+
1581
+ #: views/packages/main/s2.scan2.php:69
1582
+ msgid ""
1583
+ "The minimum PHP version supported by Duplicator is 5.2.9. It is highly "
1584
+ "recommended to use PHP 5.3+ for improved stability. For international "
1585
+ "language support please use PHP 7.0+."
1586
+ msgstr ""
1587
+
1588
+ #: views/packages/main/s2.scan2.php:74
1589
+ msgid "PHP Open Base Dir"
1590
+ msgstr ""
1591
+
1592
+ #: views/packages/main/s2.scan2.php:75
1593
+ msgid ""
1594
+ "Issues might occur when [open_basedir] is enabled. Work with your server "
1595
+ "admin to disable this value in the php.ini file if you’re having issues "
1596
+ "building a package."
1597
+ msgstr ""
1598
+
1599
+ #: views/packages/main/s2.scan2.php:80 views/packages/main/s3.build.php:328
1600
+ msgid "PHP Max Execution Time"
1601
+ msgstr ""
1602
+
1603
+ #: views/packages/main/s2.scan2.php:81
1604
+ msgid ""
1605
+ "Timeouts may occur for larger packages when [max_execution_time] time in the "
1606
+ "php.ini is too low. A value of 0 (recommended) indicates that PHP has no "
1607
+ "time limits. An attempt is made to override this value if the server allows "
1608
+ "it."
1609
+ msgstr ""
1610
+
1611
+ #: views/packages/main/s2.scan2.php:84
1612
+ msgid ""
1613
+ "Note: Timeouts can also be set at the web server layer, so if the PHP max "
1614
+ "timeout passes and you still see a build timeout messages, then your web "
1615
+ "server could be killing the process. If you are on a budget host and "
1616
+ "limited on processing time, consider using the database or file filters to "
1617
+ "shrink the size of your overall package. However use caution as excluding "
1618
+ "the wrong resources can cause your install to not work properly."
1619
+ msgstr ""
1620
+
1621
+ #: views/packages/main/s2.scan2.php:92
1622
+ msgid "Get faster builds with Duplicator Pro with access to shell_exec zip."
1623
+ msgstr ""
1624
+
1625
+ #: views/packages/main/s2.scan2.php:112
1626
+ msgid "WordPress Version"
1627
+ msgstr ""
1628
+
1629
+ #: views/packages/main/s2.scan2.php:113
1630
+ #, php-format
1631
+ msgid ""
1632
+ "It is recommended to have a version of WordPress that is greater than %1$s. "
1633
+ "Older version of WordPress can lead to migration issues and are a security "
1634
+ "risk. If possible please update your WordPress site to the latest version."
1635
+ msgstr ""
1636
+
1637
+ #: views/packages/main/s2.scan2.php:117
1638
+ msgid "Core Files"
1639
+ msgstr ""
1640
+
1641
+ #: views/packages/main/s2.scan2.php:123
1642
+ msgid ""
1643
+ "The core WordPress paths below will <u>not</u> be included in the archive. "
1644
+ "These paths are required for WordPress to function!"
1645
+ msgstr ""
1646
+
1647
+ #: views/packages/main/s2.scan2.php:134
1648
+ msgid ""
1649
+ "The core WordPress file below will <u>not</u> be included in the archive. "
1650
+ "This file is required for WordPress to function!"
1651
+ msgstr ""
1652
+
1653
+ #: views/packages/main/s2.scan2.php:147
1654
+ msgid " to the new location for the site to function properly."
1655
+ msgstr ""
1656
+
1657
+ #: views/packages/main/s2.scan2.php:153
1658
+ msgid ""
1659
+ "If the scanner is unable to locate the wp-config.php file in the root "
1660
+ "directory, then you will need to manually copy it to its new location. This "
1661
+ "check will also look for core WordPress paths that should be included in the "
1662
+ "archive for WordPress to work correctly."
1663
+ msgstr ""
1664
+
1665
+ #: views/packages/main/s2.scan2.php:172
1666
+ msgid "Multisite: Unsupported"
1667
+ msgstr ""
1668
+
1669
+ #: views/packages/main/s2.scan2.php:173
1670
+ msgid ""
1671
+ "Duplicator does not support WordPress multisite migrations. We recommend "
1672
+ "using Duplicator Pro which currently supports full multisite migrations and "
1673
+ "subsite to standalone site migrations."
1674
+ msgstr ""
1675
+
1676
+ #: views/packages/main/s2.scan2.php:177
1677
+ msgid ""
1678
+ "While it is not recommended you can still continue with the build of this "
1679
+ "package. Please note that at install time additional manual custom "
1680
+ "configurations will need to be made to finalize this multisite migration."
1681
+ msgstr ""
1682
+
1683
+ #: views/packages/main/s2.scan2.php:179 views/packages/main/s2.scan2.php:184
1684
+ msgid "upgrade to pro"
1685
+ msgstr ""
1686
+
1687
+ #: views/packages/main/s2.scan2.php:181
1688
+ msgid "Multisite: N/A"
1689
+ msgstr ""
1690
+
1691
+ #: views/packages/main/s2.scan2.php:182
1692
+ msgid ""
1693
+ "This is not a multisite install so duplication will proceed without issue. "
1694
+ "Duplicator does not officially support multisite. However, Duplicator Pro "
1695
+ "supports duplication of a full multisite network and also has the ability to "
1696
+ "install a multisite subsite as a standalone site."
1697
+ msgstr ""
1698
+
1699
+ #: views/packages/main/s2.scan3.php:6
1700
+ #: views/tools/diagnostics/inc.settings.php:55
1701
+ msgid "Root Path"
1702
+ msgstr ""
1703
+
1704
+ #: views/packages/main/s2.scan3.php:23
1705
+ msgid "Show Scan Details"
1706
+ msgstr ""
1707
+
1708
+ #: views/packages/main/s2.scan3.php:38 views/packages/main/s2.scan3.php:370
1709
+ #: views/packages/main/s2.scan3.php:557 views/settings/general.php:158
1710
+ #: views/tools/diagnostics/inc.settings.php:167
1711
+ msgid "Enabled"
1712
+ msgstr ""
1713
+
1714
+ #: views/packages/main/s2.scan3.php:44
1715
+ msgid "Archive Size"
1716
+ msgstr ""
1717
+
1718
+ #: views/packages/main/s2.scan3.php:45
1719
+ msgid ""
1720
+ "This size includes only files BEFORE compression is applied. It does not "
1721
+ "include the size of the database script or any applied filters. Once "
1722
+ "complete the package size will be smaller than this number."
1723
+ msgstr ""
1724
+
1725
+ #: views/packages/main/s2.scan3.php:48 views/packages/main/s2.scan3.php:380
1726
+ #: views/packages/main/s2.scan3.php:442
1727
+ msgid "uncompressed"
1728
+ msgstr ""
1729
+
1730
+ #: views/packages/main/s2.scan3.php:56
1731
+ msgid "Database only"
1732
+ msgstr ""
1733
+
1734
+ #: views/packages/main/s2.scan3.php:60
1735
+ msgid ""
1736
+ "Only the database and a copy of the installer.php will be included in the "
1737
+ "archive.zip file."
1738
+ msgstr ""
1739
+
1740
+ #: views/packages/main/s2.scan3.php:67
1741
+ msgid "Skip archive scan enabled"
1742
+ msgstr ""
1743
+
1744
+ #: views/packages/main/s2.scan3.php:71
1745
+ msgid ""
1746
+ "All file checks are skipped. This could cause problems during extraction if "
1747
+ "problematic files are included."
1748
+ msgstr ""
1749
+
1750
+ #: views/packages/main/s2.scan3.php:73
1751
+ msgid " Disable the advanced option to re-enable file controls."
1752
+ msgstr ""
1753
+
1754
+ #: views/packages/main/s2.scan3.php:84
1755
+ msgid "Size Checks"
1756
+ msgstr ""
1757
+
1758
+ #: views/packages/main/s2.scan3.php:89
1759
+ msgid "File Count"
1760
+ msgstr ""
1761
+
1762
+ #: views/packages/main/s2.scan3.php:90
1763
+ msgid "Directory Count"
1764
+ msgstr ""
1765
+
1766
+ #: views/packages/main/s2.scan3.php:92
1767
+ msgid ""
1768
+ "Compressing larger sites on <i>some budget hosts</i> may cause timeouts. "
1769
+ msgstr ""
1770
+
1771
+ #: views/packages/main/s2.scan3.php:93
1772
+ msgid "more details..."
1773
+ msgstr ""
1774
+
1775
+ #: views/packages/main/s2.scan3.php:97 views/packages/main/s2.scan3.php:387
1776
+ #: views/packages/main/s3.build.php:203 views/packages/screen.php:53
1777
+ msgid "Overview"
1778
+ msgstr ""
1779
+
1780
+ #: views/packages/main/s2.scan3.php:99
1781
+ #, php-format
1782
+ msgid ""
1783
+ "This notice is triggered at [%s] and can be ignored on most hosts. If "
1784
+ "during the build process you see a \"Host Build Interrupt\" message then "
1785
+ "this host has strict processing limits. Below are some options you can take "
1786
+ "to overcome constraints set up on this host."
1787
+ msgstr ""
1788
+
1789
+ #: views/packages/main/s2.scan3.php:103
1790
+ msgid "Timeout Options"
1791
+ msgstr ""
1792
+
1793
+ #: views/packages/main/s2.scan3.php:105
1794
+ msgid ""
1795
+ "Apply the \"Quick Filters\" below or click the back button to apply on "
1796
+ "previous page."
1797
+ msgstr ""
1798
+
1799
+ #: views/packages/main/s2.scan3.php:106
1800
+ msgid "See the FAQ link to adjust this hosts timeout limits: "
1801
+ msgstr ""
1802
+
1803
+ #: views/packages/main/s2.scan3.php:106
1804
+ msgid "What can I try for Timeout Issues?"
1805
+ msgstr ""
1806
+
1807
+ #: views/packages/main/s2.scan3.php:107
1808
+ msgid "Consider trying multi-threaded support in "
1809
+ msgstr ""
1810
+
1811
+ #: views/packages/main/s2.scan3.php:108
1812
+ msgid "Duplicator Pro."
1813
+ msgstr ""
1814
+
1815
+ #: views/packages/main/s2.scan3.php:112
1816
+ #, php-format
1817
+ msgid ""
1818
+ "Files over %1$s are listed below. Larger files such as movies or zipped "
1819
+ "content can cause timeout issues on some budget hosts. If you are having "
1820
+ "issues creating a package try excluding the directory paths below or go back "
1821
+ "to Step 1 and add them."
1822
+ msgstr ""
1823
+
1824
+ #: views/packages/main/s2.scan3.php:121 views/packages/main/s2.scan3.php:208
1825
+ #: views/packages/main/s2.scan3.php:257
1826
+ msgid "Quick Filters"
1827
+ msgstr ""
1828
+
1829
+ #: views/packages/main/s2.scan3.php:122
1830
+ msgid "Large Files"
1831
+ msgstr ""
1832
+
1833
+ #: views/packages/main/s2.scan3.php:125 views/packages/main/s2.scan3.php:260
1834
+ msgid "Hide All"
1835
+ msgstr ""
1836
+
1837
+ #: views/packages/main/s2.scan3.php:126 views/packages/main/s2.scan3.php:261
1838
+ msgid "Show All"
1839
+ msgstr ""
1840
+
1841
+ #: views/packages/main/s2.scan3.php:136 views/packages/main/s2.scan3.php:276
1842
+ msgid ""
1843
+ "Core WordPress directories should not be filtered. Use caution when "
1844
+ "excluding files."
1845
+ msgstr ""
1846
+
1847
+ #: views/packages/main/s2.scan3.php:156
1848
+ msgid "No large files found during this scan."
1849
+ msgstr ""
1850
+
1851
+ #: views/packages/main/s2.scan3.php:159
1852
+ msgid ""
1853
+ "No large files found during this scan. If you're having issues building a "
1854
+ "package click the back button and try adding a file filter to non-essential "
1855
+ "files paths like wp-content/uploads. These excluded files can then be "
1856
+ "manually moved to the new location after you have ran the migration "
1857
+ "installer."
1858
+ msgstr ""
1859
+
1860
+ #: views/packages/main/s2.scan3.php:172 views/packages/main/s2.scan3.php:302
1861
+ msgid ""
1862
+ "*Checking a directory will exclude all items recursively from that path "
1863
+ "down. Please use caution when filtering directories."
1864
+ msgstr ""
1865
+
1866
+ #: views/packages/main/s2.scan3.php:175 views/packages/main/s2.scan3.php:231
1867
+ #: views/packages/main/s2.scan3.php:305
1868
+ msgid "Add Filters &amp; Rescan"
1869
+ msgstr ""
1870
+
1871
+ #: views/packages/main/s2.scan3.php:177 views/packages/main/s2.scan3.php:307
1872
+ msgid "Copy Paths to Clipboard"
1873
+ msgstr ""
1874
+
1875
+ #: views/packages/main/s2.scan3.php:193
1876
+ msgid "Addon Sites"
1877
+ msgstr ""
1878
+
1879
+ #: views/packages/main/s2.scan3.php:199
1880
+ msgid ""
1881
+ "An \"Addon Site\" is a separate WordPress site(s) residing in subdirectories "
1882
+ "within this site. If you confirm these to be separate sites, then it is "
1883
+ "recommended that you exclude them by checking the corresponding boxes below "
1884
+ "and clicking the 'Add Filters & Rescan' button. To backup the other sites "
1885
+ "install the plugin on the sites needing to be backed-up."
1886
+ msgstr ""
1887
+
1888
+ #: views/packages/main/s2.scan3.php:222
1889
+ msgid "No add on sites found."
1890
+ msgstr ""
1891
+
1892
+ #: views/packages/main/s2.scan3.php:228
1893
+ msgid "*Checking a directory will exclude all items in that path recursively."
1894
+ msgstr ""
1895
+
1896
+ #: views/packages/main/s2.scan3.php:244 views/packages/main/s2.scan3.php:258
1897
+ msgid "Name Checks"
1898
+ msgstr ""
1899
+
1900
+ #: views/packages/main/s2.scan3.php:249
1901
+ msgid ""
1902
+ "Unicode and special characters such as \"*?><:/\\|\", can be problematic on "
1903
+ "some hosts."
1904
+ msgstr ""
1905
+
1906
+ #: views/packages/main/s2.scan3.php:250
1907
+ msgid ""
1908
+ " Only consider using this filter if the package build is failing. Select "
1909
+ "files that are not important to your site or you can migrate manually."
1910
+ msgstr ""
1911
+
1912
+ #: views/packages/main/s2.scan3.php:251
1913
+ msgid ""
1914
+ "If this environment/system and the system where it will be installed are set "
1915
+ "up to support Unicode and long paths then these filters can be ignored. If "
1916
+ "you run into issues with creating or installing a package, then is "
1917
+ "recommended to filter these paths."
1918
+ msgstr ""
1919
+
1920
+ #: views/packages/main/s2.scan3.php:296
1921
+ msgid "No file/directory name warnings found."
1922
+ msgstr ""
1923
+
1924
+ #: views/packages/main/s2.scan3.php:319
1925
+ msgid "Read Checks"
1926
+ msgstr ""
1927
+
1928
+ #: views/packages/main/s2.scan3.php:324
1929
+ msgid ""
1930
+ "PHP is unable to read the following items and they will NOT be included in "
1931
+ "the package. Please work with your host to adjust the permissions or "
1932
+ "resolve the symbolic-link(s) shown in the lists below. If these items are "
1933
+ "not needed then this notice can be ignored."
1934
+ msgstr ""
1935
+
1936
+ #: views/packages/main/s2.scan3.php:330
1937
+ msgid "Unreadable Items:"
1938
+ msgstr ""
1939
+
1940
+ #: views/packages/main/s2.scan3.php:337
1941
+ msgid "No unreadable items found."
1942
+ msgstr ""
1943
+
1944
+ #: views/packages/main/s2.scan3.php:341
1945
+ msgid "Recursive Links:"
1946
+ msgstr ""
1947
+
1948
+ #: views/packages/main/s2.scan3.php:348
1949
+ msgid "No recursive sym-links found."
1950
+ msgstr ""
1951
+
1952
+ #: views/packages/main/s2.scan3.php:376
1953
+ msgid "Database Size:"
1954
+ msgstr ""
1955
+
1956
+ #: views/packages/main/s2.scan3.php:377
1957
+ msgid ""
1958
+ "The database size represents only the included tables. The process for "
1959
+ "gathering the size uses the query SHOW TABLE STATUS. The overall size of "
1960
+ "the database file can impact the final size of the package."
1961
+ msgstr ""
1962
+
1963
+ #: views/packages/main/s2.scan3.php:391
1964
+ msgid "TOTAL SIZE"
1965
+ msgstr ""
1966
+
1967
+ #: views/packages/main/s2.scan3.php:394
1968
+ msgid "Records"
1969
+ msgstr ""
1970
+
1971
+ #: views/packages/main/s2.scan3.php:397
1972
+ #, php-format
1973
+ msgid ""
1974
+ "Total size and row counts are approximate values. The thresholds that "
1975
+ "trigger notices are %1$s records total for the entire database. Larger "
1976
+ "databases take more time to process. On some budget hosts that have cpu/"
1977
+ "memory/timeout limits this may cause issues."
1978
+ msgstr ""
1979
+
1980
+ #: views/packages/main/s2.scan3.php:402
1981
+ msgid "TABLE DETAILS:"
1982
+ msgstr ""
1983
+
1984
+ #: views/packages/main/s2.scan3.php:404
1985
+ #, php-format
1986
+ msgid ""
1987
+ "The notices for tables are %1$s records or names with upper-case "
1988
+ "characters. Individual tables will not trigger a notice message, but can "
1989
+ "help narrow down issues if they occur later on."
1990
+ msgstr ""
1991
+
1992
+ #: views/packages/main/s2.scan3.php:411 views/packages/main/s2.scan3.php:463
1993
+ msgid "RECOMMENDATIONS:"
1994
+ msgstr ""
1995
+
1996
+ #: views/packages/main/s2.scan3.php:414
1997
+ msgid "repair and optimization"
1998
+ msgstr ""
1999
+
2000
+ #: views/packages/main/s2.scan3.php:415
2001
+ #, php-format
2002
+ msgid "1. Run a %1$s on the table to improve the overall size and performance."
2003
+ msgstr ""
2004
+
2005
+ #: views/packages/main/s2.scan3.php:417
2006
+ msgid ""
2007
+ "2. Remove post revisions and stale data from tables. Tables such as logs, "
2008
+ "statistical or other non-critical data should be cleared."
2009
+ msgstr ""
2010
+
2011
+ #: views/packages/main/s2.scan3.php:419
2012
+ msgid "Enable mysqldump"
2013
+ msgstr ""
2014
+
2015
+ #: views/packages/main/s2.scan3.php:420
2016
+ #, php-format
2017
+ msgid "3. %1$s if this host supports the option."
2018
+ msgstr ""
2019
+
2020
+ #: views/packages/main/s2.scan3.php:422
2021
+ msgid "lower_case_table_names"
2022
+ msgstr ""
2023
+
2024
+ #: views/packages/main/s2.scan3.php:423
2025
+ #, php-format
2026
+ msgid ""
2027
+ "4. For table name case sensitivity issues either rename the table with lower "
2028
+ "case characters or be prepared to work with the %1$s system variable setting."
2029
+ msgstr ""
2030
+
2031
+ #: views/packages/main/s2.scan3.php:434
2032
+ msgid "Total Size"
2033
+ msgstr ""
2034
+
2035
+ #: views/packages/main/s2.scan3.php:439
2036
+ msgid "Total Size:"
2037
+ msgstr ""
2038
+
2039
+ #: views/packages/main/s2.scan3.php:440
2040
+ msgid "The total size of the site (files plus database)."
2041
+ msgstr ""
2042
+
2043
+ #: views/packages/main/s2.scan3.php:450
2044
+ #, php-format
2045
+ msgid ""
2046
+ "The build can't continue because the total size of files and the database "
2047
+ "exceeds the %s limit that can be processed when creating a DupArchive "
2048
+ "package. "
2049
+ msgstr ""
2050
+
2051
+ #: views/packages/main/s2.scan3.php:451
2052
+ msgid ""
2053
+ "<a href=\"javascript:void(0)\" onclick=\"jQuery('#data-ll-status-"
2054
+ "recommendations').toggle()\">Click for recommendations.</a>"
2055
+ msgstr ""
2056
+
2057
+ #: views/packages/main/s2.scan3.php:457 views/packages/main/s2.scan3.php:531
2058
+ #: views/settings/packages.php:208
2059
+ msgid "Archive Engine"
2060
+ msgstr ""
2061
+
2062
+ #: views/packages/main/s2.scan3.php:459
2063
+ #, php-format
2064
+ msgid ""
2065
+ " With DupArchive, Duplicator is restricted to processing sites up to %s. To "
2066
+ "process larger sites, consider these recommendations. "
2067
+ msgstr ""
2068
+
2069
+ #: views/packages/main/s2.scan3.php:468
2070
+ msgid "Step 1"
2071
+ msgstr ""
2072
+
2073
+ #: views/packages/main/s2.scan3.php:469
2074
+ #, php-format
2075
+ msgid "- Add data filters to get the package size under %s: "
2076
+ msgstr ""
2077
+
2078
+ #: views/packages/main/s2.scan3.php:471
2079
+ msgid ""
2080
+ "- In the 'Size Checks' section above consider adding filters (if notice is "
2081
+ "shown)."
2082
+ msgstr ""
2083
+
2084
+ #: views/packages/main/s2.scan3.php:473
2085
+ #, php-format
2086
+ msgid "- In %s consider adding file/directory or database table filters."
2087
+ msgstr ""
2088
+
2089
+ #: views/packages/main/s2.scan3.php:477
2090
+ msgid "covered here."
2091
+ msgstr ""
2092
+
2093
+ #: views/packages/main/s2.scan3.php:478
2094
+ #, php-format
2095
+ msgid "- Perform a two part install %s"
2096
+ msgstr ""
2097
+
2098
+ #: views/packages/main/s2.scan3.php:481
2099
+ msgid "ZipArchive Engine"
2100
+ msgstr ""
2101
+
2102
+ #: views/packages/main/s2.scan3.php:482
2103
+ #, php-format
2104
+ msgid ""
2105
+ "- Switch to the %s which requires a capable hosting provider (VPS "
2106
+ "recommended)."
2107
+ msgstr ""
2108
+
2109
+ #: views/packages/main/s2.scan3.php:486
2110
+ #, php-format
2111
+ msgid "- Consider upgrading to %s for large site support. (unlimited)"
2112
+ msgstr ""
2113
+
2114
+ #: views/packages/main/s2.scan3.php:496
2115
+ msgid "Migrate large, multi-gig sites with"
2116
+ msgstr ""
2117
+
2118
+ #: views/packages/main/s2.scan3.php:511
2119
+ msgid "Scan Details"
2120
+ msgstr ""
2121
+
2122
+ #: views/packages/main/s2.scan3.php:518
2123
+ msgid "Copy Quick Filter Paths"
2124
+ msgstr ""
2125
+
2126
+ #: views/packages/main/s2.scan3.php:537
2127
+ msgid "Name:"
2128
+ msgstr ""
2129
+
2130
+ #: views/packages/main/s2.scan3.php:538
2131
+ msgid "Host:"
2132
+ msgstr ""
2133
+
2134
+ #: views/packages/main/s2.scan3.php:540
2135
+ msgid "Build Mode:"
2136
+ msgstr ""
2137
+
2138
+ #: views/packages/main/s2.scan3.php:556 views/settings/gopro.php:55
2139
+ msgid "File Filters"
2140
+ msgstr ""
2141
+
2142
+ #: views/packages/main/s2.scan3.php:557
2143
+ #: views/tools/diagnostics/inc.settings.php:167
2144
+ msgid "Disabled"
2145
+ msgstr ""
2146
+
2147
+ #: views/packages/main/s2.scan3.php:571
2148
+ msgid "No custom directory filters set."
2149
+ msgstr ""
2150
+
2151
+ #: views/packages/main/s2.scan3.php:581
2152
+ msgid "No file extension filters have been set."
2153
+ msgstr ""
2154
+
2155
+ #: views/packages/main/s2.scan3.php:593
2156
+ msgid "No custom file filters set."
2157
+ msgstr ""
2158
+
2159
+ #: views/packages/main/s2.scan3.php:597
2160
+ msgid "Auto Directory Filters"
2161
+ msgstr ""
2162
+
2163
+ #: views/packages/main/s2.scan3.php:603
2164
+ msgid "Auto File Filters"
2165
+ msgstr ""
2166
+
2167
+ #: views/packages/main/s2.scan3.php:616
2168
+ msgid "Path filters will be skipped during the archive process when enabled."
2169
+ msgstr ""
2170
+
2171
+ #: views/packages/main/s2.scan3.php:618
2172
+ msgid "[view json result report]"
2173
+ msgstr ""
2174
+
2175
+ #: views/packages/main/s2.scan3.php:621
2176
+ msgid "Auto filters are applied to prevent archiving other backup sets."
2177
+ msgstr ""
2178
+
2179
+ #: views/packages/main/s2.scan3.php:632 views/packages/main/s2.scan3.php:641
2180
+ msgid "Click to Copy"
2181
+ msgstr ""
2182
+
2183
+ #: views/packages/main/s2.scan3.php:646
2184
+ msgid ""
2185
+ "Copy the paths above and apply them as needed on Step 1 &gt; Archive &gt; "
2186
+ "Files section."
2187
+ msgstr ""
2188
+
2189
+ #: views/packages/main/s2.scan3.php:663
2190
+ msgid "Directory applied filter set."
2191
+ msgstr ""
2192
+
2193
+ #: views/packages/main/s2.scan3.php:690
2194
+ msgid "No directories have been selected!"
2195
+ msgstr ""
2196
+
2197
+ #: views/packages/main/s2.scan3.php:694
2198
+ msgid "No files have been selected!"
2199
+ msgstr ""
2200
+
2201
+ #: views/packages/main/s2.scan3.php:732
2202
+ msgid "Copied to Clipboard!"
2203
+ msgstr ""
2204
+
2205
+ #: views/packages/main/s2.scan3.php:734
2206
+ msgid "Manual copy of selected text required on this browser."
2207
+ msgstr ""
2208
+
2209
+ #: views/packages/main/s2.scan3.php:741
2210
+ msgid "Initializing Please Wait..."
2211
+ msgstr ""
2212
+
2213
+ #: views/packages/main/s2.scan3.php:784 views/packages/main/s2.scan3.php:791
2214
+ msgid ""
2215
+ "Error applying filters. Please go back to Step 1 to add filter manually!"
2216
+ msgstr ""
2217
+
2218
+ #: views/packages/main/s2.scan3.php:867
2219
+ msgid "Unable to report on any tables"
2220
+ msgstr ""
2221
+
2222
+ #: views/packages/main/s2.scan3.php:893
2223
+ msgid "Unable to report on database stats"
2224
+ msgstr ""
2225
+
2226
+ #: views/packages/main/s3.build.php:16
2227
+ msgid "Help review the plugin"
2228
+ msgstr ""
2229
+
2230
+ #: views/packages/main/s3.build.php:19
2231
+ msgid "Want more power? Try"
2232
+ msgstr ""
2233
+
2234
+ #: views/packages/main/s3.build.php:84
2235
+ msgid "Step 3: Build Package"
2236
+ msgstr ""
2237
+
2238
+ #: views/packages/main/s3.build.php:114
2239
+ msgid "Building Package"
2240
+ msgstr ""
2241
+
2242
+ #: views/packages/main/s3.build.php:117
2243
+ msgid "Keep this window open and do not close during the build process."
2244
+ msgstr ""
2245
+
2246
+ #: views/packages/main/s3.build.php:118
2247
+ msgid "This may take several minutes to complete."
2248
+ msgstr ""
2249
+
2250
+ #: views/packages/main/s3.build.php:122
2251
+ msgid "Build Status"
2252
+ msgstr ""
2253
+
2254
+ #: views/packages/main/s3.build.php:129
2255
+ msgid "Package Completed"
2256
+ msgstr ""
2257
+
2258
+ #: views/packages/main/s3.build.php:134
2259
+ msgid "Process Time"
2260
+ msgstr ""
2261
+
2262
+ #: views/packages/main/s3.build.php:140
2263
+ msgid "Download Files"
2264
+ msgstr ""
2265
+
2266
+ #: views/packages/main/s3.build.php:142
2267
+ msgid "Click to download installer file"
2268
+ msgstr ""
2269
+
2270
+ #: views/packages/main/s3.build.php:145
2271
+ msgid "Click to download archive file"
2272
+ msgstr ""
2273
+
2274
+ #: views/packages/main/s3.build.php:151
2275
+ msgid "Click to download both files"
2276
+ msgstr ""
2277
+
2278
+ #: views/packages/main/s3.build.php:152
2279
+ msgid "One-Click Download"
2280
+ msgstr ""
2281
+
2282
+ #: views/packages/main/s3.build.php:155
2283
+ msgid "One Click:"
2284
+ msgstr ""
2285
+
2286
+ #: views/packages/main/s3.build.php:156
2287
+ msgid ""
2288
+ "Clicking this link will open both the installer and archive download prompts "
2289
+ "at the same time. On some browsers you may have to disable pop-up warnings "
2290
+ "on this domain for this to work correctly."
2291
+ msgstr ""
2292
+
2293
+ #: views/packages/main/s3.build.php:164
2294
+ msgid "How do I install this Package?"
2295
+ msgstr ""
2296
+
2297
+ #: views/packages/main/s3.build.php:176
2298
+ msgid "Host Build Interrupt"
2299
+ msgstr ""
2300
+
2301
+ #: views/packages/main/s3.build.php:177
2302
+ msgid "This server cannot complete the build due to host setup constraints."
2303
+ msgstr ""
2304
+
2305
+ #: views/packages/main/s3.build.php:178
2306
+ msgid ""
2307
+ "To get past this hosts limitation consider the options below by clicking "
2308
+ "each section."
2309
+ msgstr ""
2310
+
2311
+ #: views/packages/main/s3.build.php:184
2312
+ msgid "Option 1: Try DupArchive"
2313
+ msgstr ""
2314
+
2315
+ #: views/packages/main/s3.build.php:188
2316
+ msgid "OPTION 1:"
2317
+ msgstr ""
2318
+
2319
+ #: views/packages/main/s3.build.php:190
2320
+ msgid ""
2321
+ "Enable the DupArchive format which is specific to Duplicator and designed to "
2322
+ "perform better on constrained budget hosts."
2323
+ msgstr ""
2324
+
2325
+ #: views/packages/main/s3.build.php:194
2326
+ msgid ""
2327
+ "Note: DupArchive on Duplicator only supports sites up to 500MB. If your "
2328
+ "site is over 500MB then use a file filter on step 1 to get the size below "
2329
+ "500MB or try the other options mentioned below. Alternatively, you may want "
2330
+ "to consider"
2331
+ msgstr ""
2332
+
2333
+ #: views/packages/main/s3.build.php:200
2334
+ msgid " which is capable of migrating sites much larger than 500MB."
2335
+ msgstr ""
2336
+
2337
+ #: views/packages/main/s3.build.php:204 views/packages/main/s3.build.php:271
2338
+ msgid "Please follow these steps:"
2339
+ msgstr ""
2340
+
2341
+ #: views/packages/main/s3.build.php:206
2342
+ msgid ""
2343
+ "On the scanner step check to make sure your package is under 500MB. If not "
2344
+ "see additional options below."
2345
+ msgstr ""
2346
+
2347
+ #: views/packages/main/s3.build.php:208
2348
+ msgid ""
2349
+ "Go to Duplicator &gt; Settings &gt; Packages Tab &gt; Archive Engine &gt;"
2350
+ msgstr ""
2351
+
2352
+ #: views/packages/main/s3.build.php:209
2353
+ msgid "Enable DupArchive"
2354
+ msgstr ""
2355
+
2356
+ #: views/packages/main/s3.build.php:211
2357
+ msgid "Build a new package using the new engine format."
2358
+ msgstr ""
2359
+
2360
+ #: views/packages/main/s3.build.php:215
2361
+ msgid ""
2362
+ "Note: The DupArchive engine will generate an archive.daf file. This file is "
2363
+ "very similar to a .zip except that it can only be extracted by the installer."
2364
+ "php file or the"
2365
+ msgstr ""
2366
+
2367
+ #: views/packages/main/s3.build.php:217
2368
+ msgid "commandline extraction tool"
2369
+ msgstr ""
2370
+
2371
+ #: views/packages/main/s3.build.php:225
2372
+ msgid "Option 2: File Filters"
2373
+ msgstr ""
2374
+
2375
+ #: views/packages/main/s3.build.php:229
2376
+ msgid "OPTION 2:"
2377
+ msgstr ""
2378
+
2379
+ #: views/packages/main/s3.build.php:231
2380
+ msgid ""
2381
+ "The first pass for reading files on some budget hosts maybe slow and have "
2382
+ "conflicts with strict timeout settings setup by the hosting provider. In "
2383
+ "these cases, it is recommended to retry the build by adding file filters to "
2384
+ "larger files/directories."
2385
+ msgstr ""
2386
+
2387
+ #: views/packages/main/s3.build.php:236
2388
+ msgid ""
2389
+ "For example, you could filter out the \"/wp-content/uploads/\" folder to "
2390
+ "create the package then move the files from that directory over manually. "
2391
+ "If this work-flow is not desired or does not work please check-out the other "
2392
+ "options below."
2393
+ msgstr ""
2394
+
2395
+ #: views/packages/main/s3.build.php:241
2396
+ msgid "Retry Build With Filters"
2397
+ msgstr ""
2398
+
2399
+ #: views/packages/main/s3.build.php:247
2400
+ msgid "Build Folder:"
2401
+ msgstr ""
2402
+
2403
+ #: views/packages/main/s3.build.php:248
2404
+ msgid ""
2405
+ "On some servers the build will continue to run in the background. To "
2406
+ "validate if a build is still running; open the 'tmp' folder above and see if "
2407
+ "the archive file is growing in size or check the main packages screen to see "
2408
+ "if the package completed. If it is not then your server has strict timeout "
2409
+ "constraints."
2410
+ msgstr ""
2411
+
2412
+ #: views/packages/main/s3.build.php:260
2413
+ msgid "Option 3: Two-Part Install"
2414
+ msgstr ""
2415
+
2416
+ #: views/packages/main/s3.build.php:264
2417
+ msgid "OPTION 3:"
2418
+ msgstr ""
2419
+
2420
+ #: views/packages/main/s3.build.php:266
2421
+ msgid ""
2422
+ "A two-part install minimizes server load and can avoid I/O and CPU issues "
2423
+ "encountered on some budget hosts. With this procedure you simply build a "
2424
+ "'database-only' archive, manually move the website files, and then run the "
2425
+ "installer to complete the process."
2426
+ msgstr ""
2427
+
2428
+ #: views/packages/main/s3.build.php:270
2429
+ msgid " Overview"
2430
+ msgstr ""
2431
+
2432
+ #: views/packages/main/s3.build.php:273
2433
+ msgid "Click the button below to go back to Step 1."
2434
+ msgstr ""
2435
+
2436
+ #: views/packages/main/s3.build.php:274
2437
+ msgid ""
2438
+ "On Step 1 the \"Archive Only the Database\" checkbox will be auto checked."
2439
+ msgstr ""
2440
+
2441
+ #: views/packages/main/s3.build.php:276
2442
+ msgid "Complete the package build and follow the "
2443
+ msgstr ""
2444
+
2445
+ #: views/packages/main/s3.build.php:286
2446
+ msgid "Yes. I have read the above overview and would like to continue!"
2447
+ msgstr ""
2448
+
2449
+ #: views/packages/main/s3.build.php:288
2450
+ msgid "Start Two-Part Install Process"
2451
+ msgstr ""
2452
+
2453
+ #: views/packages/main/s3.build.php:297
2454
+ msgid "Option 4: Configure Server"
2455
+ msgstr ""
2456
+
2457
+ #: views/packages/main/s3.build.php:301
2458
+ msgid "OPTION 4:"
2459
+ msgstr ""
2460
+
2461
+ #: views/packages/main/s3.build.php:302
2462
+ msgid ""
2463
+ "This option is available on some hosts that allow for users to adjust server "
2464
+ "configurations. With this option you will be directed to an FAQ page that "
2465
+ "will show various recommendations you can take to improve/unlock constraints "
2466
+ "set up on this server."
2467
+ msgstr ""
2468
+
2469
+ #: views/packages/main/s3.build.php:308
2470
+ msgid "Diagnose Server Setup"
2471
+ msgstr ""
2472
+
2473
+ #: views/packages/main/s3.build.php:312
2474
+ msgid "RUNTIME DETAILS"
2475
+ msgstr ""
2476
+
2477
+ #: views/packages/main/s3.build.php:315
2478
+ msgid "Allowed Runtime:"
2479
+ msgstr ""
2480
+
2481
+ #: views/packages/main/s3.build.php:319
2482
+ msgid "PHP Max Execution"
2483
+ msgstr ""
2484
+
2485
+ #: views/packages/main/s3.build.php:329
2486
+ msgid ""
2487
+ "This value is represented in seconds. A value of 0 means no timeout limit is "
2488
+ "set for PHP."
2489
+ msgstr ""
2490
+
2491
+ #: views/packages/main/s3.build.php:333 views/settings/packages.php:167
2492
+ msgid "Mode"
2493
+ msgstr ""
2494
+
2495
+ #: views/packages/main/s3.build.php:339
2496
+ msgid "PHP Max Execution Mode"
2497
+ msgstr ""
2498
+
2499
+ #: views/packages/main/s3.build.php:341
2500
+ msgid ""
2501
+ "If the value is [dynamic] then its possible for PHP to run longer than the "
2502
+ "default. If the value is [fixed] then PHP will not be allowed to run longer "
2503
+ "than the default. <br/><br/> If this value is larger than the [Allowed "
2504
+ "Runtime] above then the web server has been enabled with a timeout cap and "
2505
+ "is overriding the PHP max time setting."
2506
+ msgstr ""
2507
+
2508
+ #: views/packages/main/s3.build.php:362
2509
+ msgid "Read Package Log File"
2510
+ msgstr ""
2511
+
2512
+ #: views/packages/screen.php:64
2513
+ msgid ""
2514
+ "<b><i class='fa fa-archive'></i> Packages » All</b><br/> The 'Packages' "
2515
+ "section is the main interface for managing all the packages that have been "
2516
+ "created. A Package consists of two core files, the 'archive.zip' and the "
2517
+ "'installer.php' file. The archive file is a zip file containing all your "
2518
+ "WordPress files and a copy of your WordPress database. The installer file "
2519
+ "is a php file that when browsed to via a web browser presents a wizard that "
2520
+ "redeploys/installs the website by extracting the archive file and installing "
2521
+ "the database. To create a package, click the 'Create New' button and "
2522
+ "follow the prompts. <br/><br/><b><i class='fa fa-download'></i> Downloads</"
2523
+ "b><br/>To download the package files click on the Installer and Archive "
2524
+ "buttons after creating a package. The archive file will have a copy of the "
2525
+ "installer inside of it named installer-backup.php in case the original "
2526
+ "installer file is lost. To see the details of a package click on the <i "
2527
+ "class='fa fa-archive'></i> details button.<br/><br/><b><i class='far fa-file-"
2528
+ "archive'></i> Archive Types</b><br/>An archive file can be saved as either "
2529
+ "a .zip file or .daf file. A zip file is a common archive format used to "
2530
+ "compress and group files. The daf file short for 'Duplicator Archive "
2531
+ "Format' is a custom format used specifically for working with larger "
2532
+ "packages and scale-ability issues on many shared hosting platforms. Both "
2533
+ "formats work very similar. The main difference is that the daf file can "
2534
+ "only be extracted using the installer.php file or the <a href='https://"
2535
+ "snapcreek.com/duplicator/docs/faqs-tech/#faq-trouble-052-q' "
2536
+ "target='_blank'>DAF extraction tool</a>. The zip file can be used by the "
2537
+ "installer.php or other zip tools like winrar/7zip/winzip or other client-"
2538
+ "side tools. <br/><br/>"
2539
+ msgstr ""
2540
+
2541
+ #: views/packages/screen.php:85
2542
+ msgid ""
2543
+ "<b>Packages New » 1 Setup</b> <br/>The setup step allows for optional "
2544
+ "filtered directory paths, files, file extensions and database tables. To "
2545
+ "filter specific system files, click the 'Enable File Filters' checkbox and "
2546
+ "add the full path of the file or directory, followed by a semicolon. For a "
2547
+ "file extension add the name (i.e. 'zip') followed by a semicolon. <br/><br/"
2548
+ ">To exclude a database table, check the box labeled 'Enable Table Filters' "
2549
+ "and check the table name to exclude. To include only a copy of your database "
2550
+ "in the archive file check the box labeled 'Archive Only the Database'. The "
2551
+ "installer.php file can optionally be pre-filled with data at install time "
2552
+ "but is not required. <br/><br/>"
2553
+ msgstr ""
2554
+
2555
+ #: views/packages/screen.php:97
2556
+ msgid ""
2557
+ "<b>Packages » 2 Scan</b> <br/>The plugin will scan your system files and "
2558
+ "database to let you know if there are any concerns or issues that may be "
2559
+ "present. All items in green mean the checks looked good. All items in red "
2560
+ "indicate a warning. Warnings will not prevent the build from running, "
2561
+ "however if you do run into issues with the build then investigating the "
2562
+ "warnings should be considered. Click on each section for more details about "
2563
+ "each scan check. <br/><br/>"
2564
+ msgstr ""
2565
+
2566
+ #: views/packages/screen.php:105
2567
+ msgid ""
2568
+ "<b>Packages » 3 Build</b> <br/>The final step in the build process where the "
2569
+ "installer script and archive of the website can be downloaded. To start "
2570
+ "the install process follow these steps: <ol><li>Download the installer.php "
2571
+ "and archive.zip files to your local computer.</li><li>For localhost installs "
2572
+ "be sure you have PHP, Apache & MySQL installed on your local computer with "
2573
+ "software such as XAMPP, Instant WordPress or MAMP for MAC. Place the package."
2574
+ "zip and installer.php into any empty directory under your webroot then "
2575
+ "browse to the installer.php via your web browser to launch the install "
2576
+ "wizard.</li><li>For remote installs use FTP or cPanel to upload both the "
2577
+ "archive.zip and installer.php to your hosting provider. Place the files in a "
2578
+ "new empty directory under your host's webroot accessible from a valid URL "
2579
+ "such as http://your-domain/your-wp-directory/installer.php to launch the "
2580
+ "install wizard. On some hosts the root directory will be a something like "
2581
+ "public_html -or- www. If your're not sure contact your hosting provider. </"
2582
+ "li></ol>For complete instructions see:<br/>\n"
2583
+ "\t\t\t\t\t<a href='https://snapcreek.com/duplicator/docs/quick-start/?"
2584
+ "utm_source=duplicator_free&amp;utm_medium=wordpress_plugin&amp;"
2585
+ "utm_content=package_built_install_help&amp;"
2586
+ "utm_campaign=duplicator_free#quick-040-q' target='_blank'>\n"
2587
+ "\t\t\t\t\tHow do I install this Package?</a><br/><br/>"
2588
+ msgstr ""
2589
+
2590
+ #: views/packages/screen.php:122
2591
+ msgid ""
2592
+ "<b>Packages » Details</b> <br/>The details view will give you a full break-"
2593
+ "down of the package including any errors that may have occured during the "
2594
+ "install. <br/><br/>"
2595
+ msgstr ""
2596
+
2597
+ #: views/settings/about-info.php:49
2598
+ msgid ""
2599
+ "Duplicator can streamline your workflow and quickly clone/migrate a "
2600
+ "WordPress site. The plugin helps admins, designers and developers speed up "
2601
+ "the migration process of moving a WordPress site. Please help us continue "
2602
+ "development by giving the plugin a 5 star."
2603
+ msgstr ""
2604
+
2605
+ #: views/settings/about-info.php:58
2606
+ msgid "Rate Duplicator"
2607
+ msgstr ""
2608
+
2609
+ #: views/settings/about-info.php:69
2610
+ msgid "Support Duplicator"
2611
+ msgstr ""
2612
+
2613
+ #: views/settings/about-info.php:71
2614
+ msgid "with a 5 star review!"
2615
+ msgstr ""
2616
+
2617
+ #: views/settings/about-info.php:85
2618
+ msgid "Spread the Word"
2619
+ msgstr ""
2620
+
2621
+ #: views/settings/about-info.php:92
2622
+ msgid "Facebook"
2623
+ msgstr ""
2624
+
2625
+ #: views/settings/about-info.php:95
2626
+ msgid "Twitter"
2627
+ msgstr ""
2628
+
2629
+ #: views/settings/about-info.php:98
2630
+ msgid "LinkedIn"
2631
+ msgstr ""
2632
+
2633
+ #: views/settings/about-info.php:101
2634
+ msgid "Google+"
2635
+ msgstr ""
2636
+
2637
+ #: views/settings/about-info.php:120
2638
+ msgid "Stay in the Loop"
2639
+ msgstr ""
2640
+
2641
+ #: views/settings/about-info.php:130
2642
+ msgid ""
2643
+ "Subscribe to the Duplicator newsletter and stay on top of great ideas, "
2644
+ "tutorials, and better ways to improve your workflows"
2645
+ msgstr ""
2646
+
2647
+ #: views/settings/controller.php:24
2648
+ msgid "Schedules"
2649
+ msgstr ""
2650
+
2651
+ #: views/settings/controller.php:26
2652
+ msgid "License"
2653
+ msgstr ""
2654
+
2655
+ #: views/settings/controller.php:27
2656
+ msgid "About"
2657
+ msgstr ""
2658
+
2659
+ #: views/settings/general.php:8
2660
+ msgid "General Settings Saved"
2661
+ msgstr ""
2662
+
2663
+ #: views/settings/general.php:88
2664
+ msgid "Plugin"
2665
+ msgstr ""
2666
+
2667
+ #: views/settings/general.php:92 views/tools/diagnostics/inc.settings.php:91
2668
+ #: views/tools/diagnostics/inc.settings.php:110
2669
+ #: views/tools/diagnostics/inc.settings.php:183
2670
+ msgid "Version"
2671
+ msgstr ""
2672
+
2673
+ #: views/settings/general.php:99
2674
+ msgid "Uninstall"
2675
+ msgstr ""
2676
+
2677
+ #: views/settings/general.php:102
2678
+ msgid "Delete Plugin Settings"
2679
+ msgstr ""
2680
+
2681
+ #: views/settings/general.php:105
2682
+ msgid "Delete Entire Storage Directory"
2683
+ msgstr ""
2684
+
2685
+ #: views/settings/general.php:112
2686
+ msgid "Full Path"
2687
+ msgstr ""
2688
+
2689
+ #: views/settings/general.php:115
2690
+ msgid "Disable .htaccess File In Storage Directory"
2691
+ msgstr ""
2692
+
2693
+ #: views/settings/general.php:117
2694
+ msgid "Disable if issues occur when downloading installer/archive files."
2695
+ msgstr ""
2696
+
2697
+ #: views/settings/general.php:122
2698
+ msgid "Custom Roles"
2699
+ msgstr ""
2700
+
2701
+ #: views/settings/general.php:125
2702
+ msgid "Enable User Role Editor Plugin Integration"
2703
+ msgstr ""
2704
+
2705
+ #: views/settings/general.php:130
2706
+ msgid "The User Role Editor Plugin"
2707
+ msgstr ""
2708
+
2709
+ #: views/settings/general.php:131 views/settings/gopro.php:46
2710
+ msgid "Free"
2711
+ msgstr ""
2712
+
2713
+ #: views/settings/general.php:132
2714
+ msgid "or"
2715
+ msgstr ""
2716
+
2717
+ #: views/settings/general.php:133 views/settings/gopro.php:47
2718
+ msgid "Professional"
2719
+ msgstr ""
2720
+
2721
+ #: views/settings/general.php:134
2722
+ msgid "must be installed to use"
2723
+ msgstr ""
2724
+
2725
+ #: views/settings/general.php:135
2726
+ msgid "this feature."
2727
+ msgstr ""
2728
+
2729
+ #: views/settings/general.php:144
2730
+ msgid "Debug"
2731
+ msgstr ""
2732
+
2733
+ #: views/settings/general.php:148
2734
+ msgid "Debugging"
2735
+ msgstr ""
2736
+
2737
+ #: views/settings/general.php:151
2738
+ msgid "Enable debug options throughout user interface"
2739
+ msgstr ""
2740
+
2741
+ #: views/settings/general.php:155
2742
+ msgid "Trace Log"
2743
+ msgstr ""
2744
+
2745
+ #: views/settings/general.php:161
2746
+ msgid ""
2747
+ "Turns on detailed operation logging. Logging will occur in both PHP error "
2748
+ "and local trace logs."
2749
+ msgstr ""
2750
+
2751
+ #: views/settings/general.php:163
2752
+ msgid ""
2753
+ "WARNING: Only turn on this setting when asked to by support as tracing will "
2754
+ "impact performance."
2755
+ msgstr ""
2756
+
2757
+ #: views/settings/general.php:167
2758
+ msgid "Download Trace Log"
2759
+ msgstr ""
2760
+
2761
+ #: views/settings/general.php:175
2762
+ msgid "Advanced"
2763
+ msgstr ""
2764
+
2765
+ #: views/settings/general.php:182
2766
+ msgid "Reset Packages"
2767
+ msgstr ""
2768
+
2769
+ #: views/settings/general.php:185
2770
+ msgid ""
2771
+ "This process will reset all packages by deleting those without a completed "
2772
+ "status, reset the active package id and perform a cleanup of the build tmp "
2773
+ "file."
2774
+ msgstr ""
2775
+
2776
+ #: views/settings/general.php:188
2777
+ msgid "Reset Settings"
2778
+ msgstr ""
2779
+
2780
+ #: views/settings/general.php:189
2781
+ msgid ""
2782
+ "This action should only be used if the packages screen is having issues or a "
2783
+ "build is stuck."
2784
+ msgstr ""
2785
+
2786
+ #: views/settings/general.php:194
2787
+ msgid "Archive scan"
2788
+ msgstr ""
2789
+
2790
+ #: views/settings/general.php:197
2791
+ msgid "Skip"
2792
+ msgstr ""
2793
+
2794
+ #: views/settings/general.php:199
2795
+ msgid ""
2796
+ "If enabled all files check on scan will be skipped before package creation. "
2797
+ "In some cases, this option can be beneficial if the scan process is having "
2798
+ "issues running or returning errors."
2799
+ msgstr ""
2800
+
2801
+ #: views/settings/general.php:205
2802
+ msgid "Other Plugins/Themes JS"
2803
+ msgstr ""
2804
+
2805
+ #: views/settings/general.php:208 views/settings/general.php:224
2806
+ msgid "Unhook them on Duplicator pages"
2807
+ msgstr ""
2808
+
2809
+ #: views/settings/general.php:211
2810
+ msgid ""
2811
+ "Check this option if other plugins/themes JavaScript files are conflicting "
2812
+ "with Duplicator."
2813
+ msgstr ""
2814
+
2815
+ #: views/settings/general.php:215 views/settings/general.php:231
2816
+ msgid ""
2817
+ "Do not modify this setting unless you know the expected result or have "
2818
+ "talked to support."
2819
+ msgstr ""
2820
+
2821
+ #: views/settings/general.php:221
2822
+ msgid "Other Plugins/Themes CSS"
2823
+ msgstr ""
2824
+
2825
+ #: views/settings/general.php:227
2826
+ msgid ""
2827
+ "Check this option if other plugins/themes CSS files are conflicting with "
2828
+ "Duplicator."
2829
+ msgstr ""
2830
+
2831
+ #: views/settings/general.php:240
2832
+ msgid "Save General Settings"
2833
+ msgstr ""
2834
+
2835
+ #: views/settings/general.php:249
2836
+ msgid "Reset Packages ?"
2837
+ msgstr ""
2838
+
2839
+ #: views/settings/general.php:250
2840
+ msgid ""
2841
+ "This will clear and reset all of the current temporary packages. Would you "
2842
+ "like to continue?"
2843
+ msgstr ""
2844
+
2845
+ #: views/settings/general.php:251
2846
+ msgid "Resetting settings, Please Wait..."
2847
+ msgstr ""
2848
+
2849
+ #: views/settings/general.php:254
2850
+ msgid "Yes"
2851
+ msgstr ""
2852
+
2853
+ #: views/settings/general.php:255
2854
+ msgid "No"
2855
+ msgstr ""
2856
+
2857
+ #: views/settings/general.php:259
2858
+ msgid "AJAX ERROR!"
2859
+ msgstr ""
2860
+
2861
+ #: views/settings/general.php:259
2862
+ msgid "Ajax request error"
2863
+ msgstr ""
2864
+
2865
+ #: views/settings/general.php:264 views/settings/general.php:317
2866
+ msgid "RESPONSE ERROR!"
2867
+ msgstr ""
2868
+
2869
+ #: views/settings/general.php:307
2870
+ msgid "Packages successfully reset"
2871
+ msgstr ""
2872
+
2873
+ #: views/settings/gopro.php:39
2874
+ msgid "The simplicity of Duplicator"
2875
+ msgstr ""
2876
+
2877
+ #: views/settings/gopro.php:40
2878
+ msgid "with power for everyone."
2879
+ msgstr ""
2880
+
2881
+ #: views/settings/gopro.php:45
2882
+ msgid "Feature"
2883
+ msgstr ""
2884
+
2885
+ #: views/settings/gopro.php:50
2886
+ msgid "Backup Files & Database"
2887
+ msgstr ""
2888
+
2889
+ #: views/settings/gopro.php:60
2890
+ msgid "Database Table Filters"
2891
+ msgstr ""
2892
+
2893
+ #: views/settings/gopro.php:65
2894
+ msgid "Migration Wizard"
2895
+ msgstr ""
2896
+
2897
+ #: views/settings/gopro.php:70
2898
+ msgid "Scheduled Backups"
2899
+ msgstr ""
2900
+
2901
+ #: views/settings/gopro.php:77
2902
+ msgid "Amazon S3 Storage"
2903
+ msgstr ""
2904
+
2905
+ #: views/settings/gopro.php:85
2906
+ msgid "Dropbox Storage "
2907
+ msgstr ""
2908
+
2909
+ #: views/settings/gopro.php:93
2910
+ msgid "Google Drive Storage"
2911
+ msgstr ""
2912
+
2913
+ #: views/settings/gopro.php:101
2914
+ msgid "Microsoft One Drive Storage"
2915
+ msgstr ""
2916
+
2917
+ #: views/settings/gopro.php:109
2918
+ msgid "Remote FTP/SFTP Storage"
2919
+ msgstr ""
2920
+
2921
+ #: views/settings/gopro.php:115
2922
+ msgid "Overwrite Live Site"
2923
+ msgstr ""
2924
+
2925
+ #: views/settings/gopro.php:117
2926
+ msgid "Overwrite Existing Site"
2927
+ msgstr ""
2928
+
2929
+ #: views/settings/gopro.php:118
2930
+ msgid "Overwrite a live site. Makes installing super-fast!"
2931
+ msgstr ""
2932
+
2933
+ #: views/settings/gopro.php:124 views/settings/gopro.php:126
2934
+ msgid "Large Site Support"
2935
+ msgstr ""
2936
+
2937
+ #: views/settings/gopro.php:127
2938
+ msgid ""
2939
+ "Advanced archive engine processes multi-gig sites - even on stubborn budget "
2940
+ "hosts!"
2941
+ msgstr ""
2942
+
2943
+ #: views/settings/gopro.php:133
2944
+ msgid "Multiple Archive Engines"
2945
+ msgstr ""
2946
+
2947
+ #: views/settings/gopro.php:138
2948
+ msgid "Server Throttling"
2949
+ msgstr ""
2950
+
2951
+ #: views/settings/gopro.php:143
2952
+ msgid "Background Processing"
2953
+ msgstr ""
2954
+
2955
+ #: views/settings/gopro.php:148
2956
+ msgid "Installer Passwords"
2957
+ msgstr ""
2958
+
2959
+ #: views/settings/gopro.php:153
2960
+ msgid " Regenerate Salts"
2961
+ msgstr ""
2962
+
2963
+ #: views/settings/gopro.php:155
2964
+ msgid "Regenerate Salts"
2965
+ msgstr ""
2966
+
2967
+ #: views/settings/gopro.php:156
2968
+ msgid ""
2969
+ "Installer contains option to regenerate salts in the wp-config.php file. "
2970
+ "This feature is only available with Freelancer, Business or Gold licenses."
2971
+ msgstr ""
2972
+
2973
+ #: views/settings/gopro.php:162 views/settings/gopro.php:164
2974
+ msgid "WP-Config Control Plus"
2975
+ msgstr ""
2976
+
2977
+ #: views/settings/gopro.php:165
2978
+ msgid "Control many wp-config.php settings right from the installer!"
2979
+ msgstr ""
2980
+
2981
+ #: views/settings/gopro.php:173
2982
+ msgid "cPanel Database API"
2983
+ msgstr ""
2984
+
2985
+ #: views/settings/gopro.php:177
2986
+ msgid ""
2987
+ "Create the database and database user directly in the installer. No need to "
2988
+ "browse to your host's cPanel application."
2989
+ msgstr ""
2990
+
2991
+ #: views/settings/gopro.php:183
2992
+ msgid "Multisite Network Migration"
2993
+ msgstr ""
2994
+
2995
+ #: views/settings/gopro.php:188
2996
+ msgid "Multisite Subsite &gt; Standalone"
2997
+ msgstr ""
2998
+
2999
+ #: views/settings/gopro.php:190
3000
+ msgid "Multisite"
3001
+ msgstr ""
3002
+
3003
+ #: views/settings/gopro.php:191
3004
+ msgid ""
3005
+ "Install an individual subsite from a Multisite as a standalone site. This "
3006
+ "feature is only available with Business or Gold licenses."
3007
+ msgstr ""
3008
+
3009
+ #: views/settings/gopro.php:198
3010
+ msgid "Custom Search & Replace"
3011
+ msgstr ""
3012
+
3013
+ #: views/settings/gopro.php:204
3014
+ msgid "Email Alerts"
3015
+ msgstr ""
3016
+
3017
+ #: views/settings/gopro.php:210
3018
+ msgid "Manual Transfers"
3019
+ msgstr ""
3020
+
3021
+ #: views/settings/gopro.php:216
3022
+ msgid "Active Customer Support"
3023
+ msgstr ""
3024
+
3025
+ #: views/settings/gopro.php:219
3026
+ msgid ""
3027
+ "Pro users get top priority for any requests to our support desk. In most "
3028
+ "cases responses will be answered in under 24 hours."
3029
+ msgstr ""
3030
+
3031
+ #: views/settings/gopro.php:225
3032
+ msgid "Plus Many Other Features..."
3033
+ msgstr ""
3034
+
3035
+ #: views/settings/gopro.php:234
3036
+ msgid "Check It Out!"
3037
+ msgstr ""
3038
+
3039
+ #: views/settings/license.php:4
3040
+ msgid "Activation"
3041
+ msgstr ""
3042
+
3043
+ #: views/settings/license.php:9
3044
+ #, php-format
3045
+ msgid "%1$sManage Licenses%2$s"
3046
+ msgstr ""
3047
+
3048
+ #: views/settings/license.php:14
3049
+ msgid "Duplicator Free"
3050
+ msgstr ""
3051
+
3052
+ #: views/settings/license.php:16
3053
+ msgid "Basic Features"
3054
+ msgstr ""
3055
+
3056
+ #: views/settings/license.php:17
3057
+ msgid "Pro Features"
3058
+ msgstr ""
3059
+
3060
+ #: views/settings/license.php:22
3061
+ msgid "License Key"
3062
+ msgstr ""
3063
+
3064
+ #: views/settings/license.php:26
3065
+ msgid "The free version of Duplicator does not require a license key. "
3066
+ msgstr ""
3067
+
3068
+ #: views/settings/license.php:28
3069
+ msgid ""
3070
+ "Professional Users: Please note that if you have already purchased the "
3071
+ "Professional version it is a separate plugin that you download and install. "
3072
+ "You can download the Professional version from the email sent after your "
3073
+ "purchase or click on the 'Manage Licenses' link above to download the plugin "
3074
+ "from your snapcreek.com dashboard. "
3075
+ msgstr ""
3076
+
3077
+ #: views/settings/license.php:31
3078
+ msgid "If you would like to purchase the professional version you can "
3079
+ msgstr ""
3080
+
3081
+ #: views/settings/license.php:32
3082
+ msgid "get a copy here"
3083
+ msgstr ""
3084
+
3085
+ #: views/settings/packages.php:8
3086
+ msgid "Package Settings Saved"
3087
+ msgstr ""
3088
+
3089
+ #: views/settings/packages.php:74
3090
+ msgid "SQL Script"
3091
+ msgstr ""
3092
+
3093
+ #: views/settings/packages.php:78
3094
+ msgid "Mysqldump"
3095
+ msgstr ""
3096
+
3097
+ #: views/settings/packages.php:88
3098
+ msgid "PHP Code"
3099
+ msgstr ""
3100
+
3101
+ #: views/settings/packages.php:98
3102
+ msgid ""
3103
+ "This server does not support the PHP shell_exec function which is required "
3104
+ "for mysqldump to run. "
3105
+ msgstr ""
3106
+
3107
+ #: views/settings/packages.php:99
3108
+ msgid "Please contact the host or server administrator to enable this feature."
3109
+ msgstr ""
3110
+
3111
+ #: views/settings/packages.php:104 views/tools/diagnostics/logging.php:180
3112
+ msgid "Host Recommendation:"
3113
+ msgstr ""
3114
+
3115
+ #: views/settings/packages.php:105 views/tools/diagnostics/logging.php:181
3116
+ msgid ""
3117
+ "Duplicator recommends going with the high performance pro plan or better "
3118
+ "from our recommended list"
3119
+ msgstr ""
3120
+
3121
+ #: views/settings/packages.php:109
3122
+ msgid "Please visit our recommended"
3123
+ msgstr ""
3124
+
3125
+ #: views/settings/packages.php:110 views/settings/packages.php:134
3126
+ #: views/tools/diagnostics/logging.php:186
3127
+ msgid "host list"
3128
+ msgstr ""
3129
+
3130
+ #: views/settings/packages.php:111
3131
+ msgid "for reliable access to mysqldump"
3132
+ msgstr ""
3133
+
3134
+ #: views/settings/packages.php:122
3135
+ msgid "Successfully Found:"
3136
+ msgstr ""
3137
+
3138
+ #: views/settings/packages.php:129
3139
+ msgid ""
3140
+ "Mysqldump was not found at its default location or the location provided. "
3141
+ "Please enter a custom path to a valid location where mysqldump can run. If "
3142
+ "the problem persist contact your host or server administrator. "
3143
+ msgstr ""
3144
+
3145
+ #: views/settings/packages.php:133
3146
+ msgid "See the"
3147
+ msgstr ""
3148
+
3149
+ #: views/settings/packages.php:135
3150
+ msgid "for reliable access to mysqldump."
3151
+ msgstr ""
3152
+
3153
+ #: views/settings/packages.php:141
3154
+ msgid "Custom Path"
3155
+ msgstr ""
3156
+
3157
+ #: views/settings/packages.php:143
3158
+ msgid "mysqldump path:"
3159
+ msgstr ""
3160
+
3161
+ #: views/settings/packages.php:144
3162
+ msgid ""
3163
+ "Add a custom path if the path to mysqldump is not properly detected. For "
3164
+ "all paths use a forward slash as the path seperator. On Linux systems use "
3165
+ "mysqldump for Windows systems use mysqldump.exe. If the path tried does not "
3166
+ "work please contact your hosting provider for details on the correct path."
3167
+ msgstr ""
3168
+
3169
+ #: views/settings/packages.php:148
3170
+ msgid "/usr/bin/mypath/mysqldump"
3171
+ msgstr ""
3172
+
3173
+ #: views/settings/packages.php:152
3174
+ msgid ""
3175
+ "<i class=\"fa fa-exclamation-triangle fa-sm\"></i> The custom path provided "
3176
+ "is not recognized as a valid mysqldump file:<br/>"
3177
+ msgstr ""
3178
+
3179
+ #: views/settings/packages.php:170
3180
+ msgid "Single-Threaded"
3181
+ msgstr ""
3182
+
3183
+ #: views/settings/packages.php:173
3184
+ msgid "Multi-Threaded"
3185
+ msgstr ""
3186
+
3187
+ #: views/settings/packages.php:177
3188
+ msgid "PHP Code Mode:"
3189
+ msgstr ""
3190
+
3191
+ #: views/settings/packages.php:179
3192
+ msgid ""
3193
+ "Single-Threaded mode attempts to create the entire database script in one "
3194
+ "request. Multi-Threaded mode allows the database script to be chunked over "
3195
+ "multiple requests. Multi-Threaded mode is typically slower but much more "
3196
+ "reliable especially for larger databases."
3197
+ msgstr ""
3198
+
3199
+ #: views/settings/packages.php:181
3200
+ msgid "<br><br><i>Multi-Threaded mode is only available in Duplicator Pro.</i>"
3201
+ msgstr ""
3202
+
3203
+ #: views/settings/packages.php:184
3204
+ msgid "Query Limit Size"
3205
+ msgstr ""
3206
+
3207
+ #: views/settings/packages.php:194
3208
+ msgid "PHP Query Limit Size"
3209
+ msgstr ""
3210
+
3211
+ #: views/settings/packages.php:195
3212
+ msgid ""
3213
+ "A higher limit size will speed up the database build time, however it will "
3214
+ "use more memory. If your host has memory caps start off low."
3215
+ msgstr ""
3216
+
3217
+ #: views/settings/packages.php:213
3218
+ msgid "ZipArchive"
3219
+ msgstr ""
3220
+
3221
+ #: views/settings/packages.php:219
3222
+ msgid "DupArchive"
3223
+ msgstr ""
3224
+
3225
+ #: views/settings/packages.php:228
3226
+ msgid "Creates a archive format (archive.zip)."
3227
+ msgstr ""
3228
+
3229
+ #: views/settings/packages.php:229
3230
+ msgid ""
3231
+ "This option uses the internal PHP ZipArchive classes to create a Zip file."
3232
+ msgstr ""
3233
+
3234
+ #: views/settings/packages.php:238
3235
+ msgid "Creates a custom archive format (archive.daf)."
3236
+ msgstr ""
3237
+
3238
+ #: views/settings/packages.php:239
3239
+ msgid ""
3240
+ "This option is recommended for large sites or sites on constrained servers."
3241
+ msgstr ""
3242
+
3243
+ #: views/settings/packages.php:246
3244
+ msgid "Archive Flush"
3245
+ msgstr ""
3246
+
3247
+ #: views/settings/packages.php:249
3248
+ msgid "Attempt Network Keep Alive"
3249
+ msgstr ""
3250
+
3251
+ #: views/settings/packages.php:250
3252
+ msgid "enable only for large archives"
3253
+ msgstr ""
3254
+
3255
+ #: views/settings/packages.php:253
3256
+ msgid ""
3257
+ "This will attempt to keep a network connection established for large "
3258
+ "archives."
3259
+ msgstr ""
3260
+
3261
+ #: views/settings/packages.php:254
3262
+ msgid " Valid only when Archive Engine for ZipArchive is enabled."
3263
+ msgstr ""
3264
+
3265
+ #: views/settings/packages.php:261
3266
+ msgid "Visual"
3267
+ msgstr ""
3268
+
3269
+ #: views/settings/packages.php:265
3270
+ msgid "Created Format"
3271
+ msgstr ""
3272
+
3273
+ #: views/settings/packages.php:269
3274
+ msgid "By Year"
3275
+ msgstr ""
3276
+
3277
+ #: views/settings/packages.php:276
3278
+ msgid "By Month"
3279
+ msgstr ""
3280
+
3281
+ #: views/settings/packages.php:283
3282
+ msgid "By Day"
3283
+ msgstr ""
3284
+
3285
+ #: views/settings/packages.php:291
3286
+ msgid ""
3287
+ "The UTC date format shown in the 'Created' column on the Packages screen."
3288
+ msgstr ""
3289
+
3290
+ #: views/settings/packages.php:292
3291
+ msgid ""
3292
+ "To use WordPress timezone formats consider an upgrade to Duplicator Pro."
3293
+ msgstr ""
3294
+
3295
+ #: views/settings/packages.php:301
3296
+ msgid "Save Package Settings"
3297
+ msgstr ""
3298
+
3299
+ #: views/settings/schedule.php:14 views/tools/templates.php:15
3300
+ msgid "This option is available in Duplicator Pro."
3301
+ msgstr ""
3302
+
3303
+ #: views/settings/schedule.php:15
3304
+ msgid ""
3305
+ "Create robust schedules that automatically create packages while you sleep."
3306
+ msgstr ""
3307
+
3308
+ #: views/settings/schedule.php:17
3309
+ msgid "Simply choose your storage location and when you want it to run."
3310
+ msgstr ""
3311
+
3312
+ #: views/settings/storage.php:15
3313
+ msgid "Store your packages in multiple locations with Duplicator Pro"
3314
+ msgstr ""
3315
+
3316
+ #: views/settings/storage.php:20
3317
+ msgid " Dropbox"
3318
+ msgstr ""
3319
+
3320
+ #: views/settings/storage.php:28
3321
+ msgid ""
3322
+ "Set up a one-time storage location and automatically <br/> push the package "
3323
+ "to your destination."
3324
+ msgstr ""
3325
+
3326
+ #: views/tools/controller.php:22
3327
+ msgid "Diagnostics"
3328
+ msgstr ""
3329
+
3330
+ #: views/tools/controller.php:23
3331
+ msgid "Templates"
3332
+ msgstr ""
3333
+
3334
+ #: views/tools/diagnostics/inc.data.php:11
3335
+ msgid "Stored Data"
3336
+ msgstr ""
3337
+
3338
+ #: views/tools/diagnostics/inc.data.php:16
3339
+ msgid "Data Cleanup"
3340
+ msgstr ""
3341
+
3342
+ #: views/tools/diagnostics/inc.data.php:21
3343
+ msgid "Remove Installation Files"
3344
+ msgstr ""
3345
+
3346
+ #: views/tools/diagnostics/inc.data.php:25
3347
+ msgid "Removes all reserved installer files."
3348
+ msgstr ""
3349
+
3350
+ #: views/tools/diagnostics/inc.data.php:30
3351
+ msgid ""
3352
+ "Clicking on the 'Remove Installation Files' button will attempt to remove "
3353
+ "the installer files used by Duplicator. These files should not be left on "
3354
+ "production systems for security reasons. Below are the files that should be "
3355
+ "removed."
3356
+ msgstr ""
3357
+
3358
+ #: views/tools/diagnostics/inc.data.php:45
3359
+ msgid "Clear Build Cache"
3360
+ msgstr ""
3361
+
3362
+ #: views/tools/diagnostics/inc.data.php:48
3363
+ msgid "Removes all build data from:"
3364
+ msgstr ""
3365
+
3366
+ #: views/tools/diagnostics/inc.data.php:53
3367
+ msgid "Options Values"
3368
+ msgstr ""
3369
+
3370
+ #: views/tools/diagnostics/inc.data.php:87
3371
+ msgid "Delete Option?"
3372
+ msgstr ""
3373
+
3374
+ #: views/tools/diagnostics/inc.data.php:88
3375
+ msgid "Delete the option value just selected?"
3376
+ msgstr ""
3377
+
3378
+ #: views/tools/diagnostics/inc.data.php:89
3379
+ msgid "Removing Option, Please Wait..."
3380
+ msgstr ""
3381
+
3382
+ #: views/tools/diagnostics/inc.data.php:94
3383
+ msgid "Clear Build Cache?"
3384
+ msgstr ""
3385
+
3386
+ #: views/tools/diagnostics/inc.data.php:95
3387
+ msgid ""
3388
+ "This process will remove all build cache files. Be sure no packages are "
3389
+ "currently building or else they will be cancelled."
3390
+ msgstr ""
3391
+
3392
+ #: views/tools/diagnostics/inc.data.php:107
3393
+ msgid "Delete the option value"
3394
+ msgstr ""
3395
+
3396
+ #: views/tools/diagnostics/inc.phpinfo.php:17
3397
+ msgid "PHP Information"
3398
+ msgstr ""
3399
+
3400
+ #: views/tools/diagnostics/inc.settings.php:5
3401
+ #: views/tools/diagnostics/inc.settings.php:6
3402
+ msgid "unknow"
3403
+ msgstr ""
3404
+
3405
+ #: views/tools/diagnostics/inc.settings.php:23
3406
+ msgid "Server Settings"
3407
+ msgstr ""
3408
+
3409
+ #: views/tools/diagnostics/inc.settings.php:32
3410
+ msgid "Duplicator Version"
3411
+ msgstr ""
3412
+
3413
+ #: views/tools/diagnostics/inc.settings.php:39
3414
+ msgid "Operating System"
3415
+ msgstr ""
3416
+
3417
+ #: views/tools/diagnostics/inc.settings.php:43
3418
+ msgid "Timezone"
3419
+ msgstr ""
3420
+
3421
+ #: views/tools/diagnostics/inc.settings.php:47
3422
+ msgid "Server Time"
3423
+ msgstr ""
3424
+
3425
+ #: views/tools/diagnostics/inc.settings.php:59
3426
+ msgid "ABSPATH"
3427
+ msgstr ""
3428
+
3429
+ #: views/tools/diagnostics/inc.settings.php:63
3430
+ msgid "Plugins Path"
3431
+ msgstr ""
3432
+
3433
+ #: views/tools/diagnostics/inc.settings.php:67
3434
+ msgid "Loaded PHP INI"
3435
+ msgstr ""
3436
+
3437
+ #: views/tools/diagnostics/inc.settings.php:71
3438
+ msgid "Server IP"
3439
+ msgstr ""
3440
+
3441
+ #: views/tools/diagnostics/inc.settings.php:78
3442
+ msgid "Can't detect"
3443
+ msgstr ""
3444
+
3445
+ #: views/tools/diagnostics/inc.settings.php:84
3446
+ msgid "Client IP"
3447
+ msgstr ""
3448
+
3449
+ #: views/tools/diagnostics/inc.settings.php:95
3450
+ msgid "Language"
3451
+ msgstr ""
3452
+
3453
+ #: views/tools/diagnostics/inc.settings.php:99
3454
+ #: views/tools/diagnostics/inc.settings.php:191
3455
+ msgid "Charset"
3456
+ msgstr ""
3457
+
3458
+ #: views/tools/diagnostics/inc.settings.php:103
3459
+ msgid "Memory Limit "
3460
+ msgstr ""
3461
+
3462
+ #: views/tools/diagnostics/inc.settings.php:104
3463
+ msgid "Max"
3464
+ msgstr ""
3465
+
3466
+ #: views/tools/diagnostics/inc.settings.php:122
3467
+ msgid "Process"
3468
+ msgstr ""
3469
+
3470
+ #: views/tools/diagnostics/inc.settings.php:126
3471
+ msgid "Safe Mode"
3472
+ msgstr ""
3473
+
3474
+ #: views/tools/diagnostics/inc.settings.php:130
3475
+ msgid "On"
3476
+ msgstr ""
3477
+
3478
+ #: views/tools/diagnostics/inc.settings.php:130
3479
+ msgid "Off"
3480
+ msgstr ""
3481
+
3482
+ #: views/tools/diagnostics/inc.settings.php:135
3483
+ msgid "Memory Limit"
3484
+ msgstr ""
3485
+
3486
+ #: views/tools/diagnostics/inc.settings.php:139
3487
+ msgid "Memory In Use"
3488
+ msgstr ""
3489
+
3490
+ #: views/tools/diagnostics/inc.settings.php:143
3491
+ #: views/tools/diagnostics/inc.settings.php:152
3492
+ msgid "Max Execution Time"
3493
+ msgstr ""
3494
+
3495
+ #: views/tools/diagnostics/inc.settings.php:153
3496
+ msgid ""
3497
+ "If the value shows dynamic then this means its possible for PHP to run "
3498
+ "longer than the default. If the value is fixed then PHP will not be allowed "
3499
+ "to run longer than the default."
3500
+ msgstr ""
3501
+
3502
+ #: views/tools/diagnostics/inc.settings.php:158
3503
+ msgid "Shell Exec"
3504
+ msgstr ""
3505
+
3506
+ #: views/tools/diagnostics/inc.settings.php:159
3507
+ #: views/tools/diagnostics/inc.settings.php:163
3508
+ msgid "Is Supported"
3509
+ msgstr ""
3510
+
3511
+ #: views/tools/diagnostics/inc.settings.php:159
3512
+ #: views/tools/diagnostics/inc.settings.php:163
3513
+ msgid "Not Supported"
3514
+ msgstr ""
3515
+
3516
+ #: views/tools/diagnostics/inc.settings.php:162
3517
+ msgid "Shell Exec Zip"
3518
+ msgstr ""
3519
+
3520
+ #: views/tools/diagnostics/inc.settings.php:166
3521
+ msgid "Suhosin Extension"
3522
+ msgstr ""
3523
+
3524
+ #: views/tools/diagnostics/inc.settings.php:170
3525
+ msgid "Architecture "
3526
+ msgstr ""
3527
+
3528
+ #: views/tools/diagnostics/inc.settings.php:176
3529
+ msgid "Error Log File "
3530
+ msgstr ""
3531
+
3532
+ #: views/tools/diagnostics/inc.settings.php:187
3533
+ msgid "Comments"
3534
+ msgstr ""
3535
+
3536
+ #: views/tools/diagnostics/inc.settings.php:195
3537
+ msgid "Wait Timeout"
3538
+ msgstr ""
3539
+
3540
+ #: views/tools/diagnostics/inc.settings.php:199
3541
+ msgid "Max Allowed Packets"
3542
+ msgstr ""
3543
+
3544
+ #: views/tools/diagnostics/inc.settings.php:203
3545
+ msgid "msyqldump Path"
3546
+ msgstr ""
3547
+
3548
+ #: views/tools/diagnostics/inc.settings.php:207
3549
+ msgid "Server Disk"
3550
+ msgstr ""
3551
+
3552
+ #: views/tools/diagnostics/inc.settings.php:210
3553
+ msgid "Free space"
3554
+ msgstr ""
3555
+
3556
+ #: views/tools/diagnostics/inc.settings.php:213
3557
+ msgid "Note: This value is the physical servers hard-drive allocation."
3558
+ msgstr ""
3559
+
3560
+ #: views/tools/diagnostics/inc.settings.php:214
3561
+ msgid ""
3562
+ "On shared hosts check your control panel for the 'TRUE' disk space quota "
3563
+ "value."
3564
+ msgstr ""
3565
+
3566
+ #: views/tools/diagnostics/inc.validator.php:16
3567
+ msgid "Run Validator"
3568
+ msgstr ""
3569
+
3570
+ #: views/tools/diagnostics/inc.validator.php:17
3571
+ msgid ""
3572
+ "This will run the scan validation check. This may take several minutes. Do "
3573
+ "you want to Continue?"
3574
+ msgstr ""
3575
+
3576
+ #: views/tools/diagnostics/inc.validator.php:28
3577
+ msgid "Scan Validator"
3578
+ msgstr ""
3579
+
3580
+ #: views/tools/diagnostics/inc.validator.php:33
3581
+ msgid ""
3582
+ "This utility will help to find unreadable files and sys-links in your "
3583
+ "environment that can lead to issues during the scan process. "
3584
+ msgstr ""
3585
+
3586
+ #: views/tools/diagnostics/inc.validator.php:34
3587
+ msgid ""
3588
+ "The utility will also shows how many files and directories you have in your "
3589
+ "system. This process may take several minutes to run. "
3590
+ msgstr ""
3591
+
3592
+ #: views/tools/diagnostics/inc.validator.php:35
3593
+ msgid ""
3594
+ "If there is a recursive loop on your system then the process has a built in "
3595
+ "check to stop after a large set of files and directories have been scanned. "
3596
+ msgstr ""
3597
+
3598
+ #: views/tools/diagnostics/inc.validator.php:36
3599
+ msgid ""
3600
+ "A message will show indicated that that a scan depth has been reached. If "
3601
+ "you have issues with the package scanner (step 2) during the build process "
3602
+ "then try to add The paths below to your file filters to allow the scanner to "
3603
+ "finish."
3604
+ msgstr ""
3605
+
3606
+ #: views/tools/diagnostics/inc.validator.php:43
3607
+ #: views/tools/diagnostics/inc.validator.php:153
3608
+ msgid "Run Scan Integrity Validation"
3609
+ msgstr ""
3610
+
3611
+ #: views/tools/diagnostics/inc.validator.php:77
3612
+ msgid "Note: Symlinks are not discoverable on Windows OS with PHP"
3613
+ msgstr ""
3614
+
3615
+ #: views/tools/diagnostics/inc.validator.php:122
3616
+ msgid "Scanning Environment... This may take a few minutes."
3617
+ msgstr ""
3618
+
3619
+ #: views/tools/diagnostics/information.php:25
3620
+ msgid "File Found: Unable to remove"
3621
+ msgstr ""
3622
+
3623
+ #: views/tools/diagnostics/information.php:26
3624
+ msgid "Removed"
3625
+ msgstr ""
3626
+
3627
+ #: views/tools/diagnostics/information.php:44
3628
+ msgid "Installer file cleanup ran!"
3629
+ msgstr ""
3630
+
3631
+ #: views/tools/diagnostics/information.php:48
3632
+ msgid "Build cache removed."
3633
+ msgstr ""
3634
+
3635
+ #: views/tools/diagnostics/information.php:125
3636
+ msgid "No Duplicator installer files found on this WordPress Site."
3637
+ msgstr ""
3638
+
3639
+ #: views/tools/diagnostics/information.php:132
3640
+ msgid "Security Notes"
3641
+ msgstr ""
3642
+
3643
+ #: views/tools/diagnostics/information.php:133
3644
+ msgid ""
3645
+ "If the installer files do not successfully get removed with this action, "
3646
+ "then they WILL need to be removed manually through your hosts control panel "
3647
+ "or FTP. Please remove all installer files to avoid any security issues on "
3648
+ "this site. For more details please visit the FAQ link <a href=\"https://"
3649
+ "snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-295-q\" target="
3650
+ "\"_blank\">Which files need to be removed after an install?</a>"
3651
+ msgstr ""
3652
+
3653
+ #: views/tools/diagnostics/information.php:140
3654
+ msgid "Some of the installer files did not get removed, "
3655
+ msgstr ""
3656
+
3657
+ #: views/tools/diagnostics/information.php:142
3658
+ msgid "please retry the installer cleanup process"
3659
+ msgstr ""
3660
+
3661
+ #: views/tools/diagnostics/information.php:144
3662
+ msgid " If this process continues please see the previous FAQ link."
3663
+ msgstr ""
3664
+
3665
+ #: views/tools/diagnostics/information.php:148
3666
+ msgid "Help Support Duplicator"
3667
+ msgstr ""
3668
+
3669
+ #: views/tools/diagnostics/information.php:149
3670
+ msgid ""
3671
+ "The Duplicator team has worked many years to make moving a WordPress site a "
3672
+ "much easier process. Show your support with a <a href=\"https://wordpress."
3673
+ "org/support/plugin/duplicator/reviews/?filter=5\" target=\"_blank\">5 star "
3674
+ "review</a>! We would be thrilled if you could!"
3675
+ msgstr ""
3676
+
3677
+ #: views/tools/diagnostics/information.php:159
3678
+ msgid "Please test the entire site to validate the migration process!"
3679
+ msgstr ""
3680
+
3681
+ #: views/tools/diagnostics/information.php:165
3682
+ msgid ""
3683
+ "NOTICE: Safe mode (Basic) was enabled during install, be sure to re-enable "
3684
+ "all your plugins."
3685
+ msgstr ""
3686
+
3687
+ #: views/tools/diagnostics/information.php:170
3688
+ msgid ""
3689
+ "NOTICE: Safe mode (Advanced) was enabled during install, be sure to re-"
3690
+ "enable all your plugins."
3691
+ msgstr ""
3692
+
3693
+ #: views/tools/diagnostics/information.php:212
3694
+ msgid "Plugin settings reset."
3695
+ msgstr ""
3696
+
3697
+ #: views/tools/diagnostics/information.php:213
3698
+ msgid "View state settings reset."
3699
+ msgstr ""
3700
+
3701
+ #: views/tools/diagnostics/information.php:214
3702
+ msgid "Active package settings reset."
3703
+ msgstr ""
3704
+
3705
+ #: views/tools/diagnostics/logging.php:166
3706
+ msgid "Log file not found or unreadable"
3707
+ msgstr ""
3708
+
3709
+ #: views/tools/diagnostics/logging.php:167
3710
+ msgid ""
3711
+ "Try to create a package, since no log files were found in the snapshots "
3712
+ "directory with the extension *.log"
3713
+ msgstr ""
3714
+
3715
+ #: views/tools/diagnostics/logging.php:168
3716
+ msgid "Reasons for log file not showing"
3717
+ msgstr ""
3718
+
3719
+ #: views/tools/diagnostics/logging.php:169
3720
+ msgid "The web server does not support returning .log file extentions"
3721
+ msgstr ""
3722
+
3723
+ #: views/tools/diagnostics/logging.php:170
3724
+ msgid ""
3725
+ "The snapshots directory does not have the correct permissions to write "
3726
+ "files. Try setting the permissions to 755"
3727
+ msgstr ""
3728
+
3729
+ #: views/tools/diagnostics/logging.php:171
3730
+ msgid ""
3731
+ "The process that PHP runs under does not have enough permissions to create "
3732
+ "files. Please contact your hosting provider for more details"
3733
+ msgstr ""
3734
+
3735
+ #: views/tools/diagnostics/logging.php:185
3736
+ msgid "Consider our recommended"
3737
+ msgstr ""
3738
+
3739
+ #: views/tools/diagnostics/logging.php:187
3740
+ msgid "if you’re unhappy with your current provider"
3741
+ msgstr ""
3742
+
3743
+ #: views/tools/diagnostics/logging.php:191
3744
+ #: views/tools/diagnostics/logging.php:196
3745
+ msgid "Options"
3746
+ msgstr ""
3747
+
3748
+ #: views/tools/diagnostics/logging.php:198
3749
+ msgid "Refresh"
3750
+ msgstr ""
3751
+
3752
+ #: views/tools/diagnostics/logging.php:201
3753
+ msgid "Auto Refresh"
3754
+ msgstr ""
3755
+
3756
+ #: views/tools/diagnostics/logging.php:207
3757
+ msgid "Package Logs"
3758
+ msgstr ""
3759
+
3760
+ #: views/tools/diagnostics/logging.php:208
3761
+ msgid "Top 20"
3762
+ msgstr ""
3763
+
3764
+ #: views/tools/diagnostics/main.php:43
3765
+ msgid "Information"
3766
+ msgstr ""
3767
+
3768
+ #: views/tools/diagnostics/main.php:44
3769
+ msgid "Logs"
3770
+ msgstr ""
3771
+
3772
+ #: views/tools/diagnostics/support.php:32
3773
+ msgid ""
3774
+ "Migrating WordPress is a complex process and the logic to make all the magic "
3775
+ "happen smoothly may not work quickly with every site. With over 30,000 "
3776
+ "plugins and a very complex server eco-system some migrations may run into "
3777
+ "issues. This is why the Duplicator includes a detailed knowledgebase that "
3778
+ "can help with many common issues. Resources to additional support, approved "
3779
+ "hosting, and alternatives to fit your needs can be found below."
3780
+ msgstr ""
3781
+
3782
+ #: views/tools/diagnostics/support.php:44
3783
+ msgid "Knowledgebase"
3784
+ msgstr ""
3785
+
3786
+ #: views/tools/diagnostics/support.php:47
3787
+ msgid "Complete Online Documentation"
3788
+ msgstr ""
3789
+
3790
+ #: views/tools/diagnostics/support.php:49
3791
+ msgid "Choose A Section"
3792
+ msgstr ""
3793
+
3794
+ #: views/tools/diagnostics/support.php:50
3795
+ msgid "Quick Start"
3796
+ msgstr ""
3797
+
3798
+ #: views/tools/diagnostics/support.php:52
3799
+ msgid "User Guide"
3800
+ msgstr ""
3801
+
3802
+ #: views/tools/diagnostics/support.php:54
3803
+ msgid "FAQs"
3804
+ msgstr ""
3805
+
3806
+ #: views/tools/diagnostics/support.php:56
3807
+ msgid "Change Log"
3808
+ msgstr ""
3809
+
3810
+ #: views/tools/diagnostics/support.php:66
3811
+ msgid "Online Support"
3812
+ msgstr ""
3813
+
3814
+ #: views/tools/diagnostics/support.php:69
3815
+ msgid "Get Help From IT Professionals"
3816
+ msgstr ""
3817
+
3818
+ #: views/tools/diagnostics/support.php:73
3819
+ msgid "Get Support!"
3820
+ msgstr ""
3821
+
3822
+ #: views/tools/diagnostics/support.php:87
3823
+ msgid "Approved Hosting"
3824
+ msgstr ""
3825
+
3826
+ #: views/tools/diagnostics/support.php:90
3827
+ msgid "Servers That Work With Duplicator"
3828
+ msgstr ""
3829
+
3830
+ #: views/tools/diagnostics/support.php:93
3831
+ msgid "Trusted Providers!"
3832
+ msgstr ""
3833
+
3834
+ #: views/tools/diagnostics/support.php:104
3835
+ msgid "Alternatives"
3836
+ msgstr ""
3837
+
3838
+ #: views/tools/diagnostics/support.php:107
3839
+ msgid "Other Commercial Resources"
3840
+ msgstr ""
3841
+
3842
+ #: views/tools/diagnostics/support.php:110
3843
+ msgid "Pro Solutions!"
3844
+ msgstr ""
3845
+
3846
+ #: views/tools/templates.php:16
3847
+ msgid ""
3848
+ "Templates allow you to customize what you want to include in your site and "
3849
+ "store it as a re-usable profile."
3850
+ msgstr ""
3851
+
3852
+ #: views/tools/templates.php:18
3853
+ msgid ""
3854
+ "Save time and create a template that can be applied to a schedule or a "
3855
+ "custom package setup."
3856
+ msgstr ""
languages/duplicator.pot CHANGED
@@ -1,3408 +1,3408 @@
1
- # Copyright (C) 2019 Snap Creek
2
- # This file is distributed under the same license as the Duplicator plugin.
3
- #, fuzzy
4
- msgid ""
5
- msgstr ""
6
- "Project-Id-Version: Duplicator 1.3.7\n"
7
- "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/duplicator\n"
8
- "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
9
- "Language-Team: LANGUAGE <LL@li.org>\n"
10
- "MIME-Version: 1.0\n"
11
- "Content-Type: text/plain; charset=UTF-8\n"
12
- "Content-Transfer-Encoding: 8bit\n"
13
- "POT-Creation-Date: 2019-09-02 12:30+0530\n"
14
- "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
15
- "X-Generator: Poedit 2.2.3\n"
16
- "X-Poedit-KeywordsList: __;_e;esc_html_e;esc_html__;_x;_ex;esc_attr_e;esc_attr__\n"
17
- "X-Poedit-Basepath: ..\n"
18
- "X-Poedit-SearchPath-0: .\n"
19
-
20
- #: classes/class.logging.php:141
21
- msgid "No Log"
22
- msgstr ""
23
-
24
- #: classes/class.server.php:207
25
- msgid "(directory)"
26
- msgstr ""
27
-
28
- #: classes/package/class.pack.database.php:663
29
- msgid "Please contact your DataBase administrator to fix the error."
30
- msgstr ""
31
-
32
- #: classes/package/class.pack.installer.php:90
33
- msgid "Error reading DupArchive mini expander"
34
- msgstr ""
35
-
36
- #: classes/package/class.pack.installer.php:103
37
- msgid "Error writing installer contents"
38
- msgstr ""
39
-
40
- #: classes/package/class.pack.php:309
41
- msgid "Package name can't be empty"
42
- msgstr ""
43
-
44
- #: classes/package/class.pack.php:315
45
- #, php-format
46
- msgid "Directories: <b>%1$s</b> isn't a valid path"
47
- msgstr ""
48
-
49
- #: classes/package/class.pack.php:321
50
- #, php-format
51
- msgid "File extension: <b>%1$s</b> isn't a valid extension"
52
- msgstr ""
53
-
54
- #: classes/package/class.pack.php:327
55
- #, php-format
56
- msgid "Files: <b>%1$s</b> isn't a valid file name"
57
- msgstr ""
58
-
59
- #: classes/package/class.pack.php:335
60
- #, php-format
61
- msgid "MySQL Server Host: <b>%1$s</b> isn't a valid host"
62
- msgstr ""
63
-
64
- #: classes/package/class.pack.php:346
65
- #, php-format
66
- msgid "MySQL Server Port: <b>%1$s</b> isn't a valid port"
67
- msgstr ""
68
-
69
- #: classes/package/class.pack.php:845
70
- #, php-format
71
- msgid "Can't find Scanfile %s. Please ensure there no non-English characters in the package or schedule name."
72
- msgstr ""
73
-
74
- #: classes/package/class.pack.php:868
75
- #, php-format
76
- msgid "EXPECTED FILE/DIRECTORY COUNT: %1$s"
77
- msgstr ""
78
-
79
- #: classes/package/class.pack.php:869
80
- #, php-format
81
- msgid "ACTUAL FILE/DIRECTORY COUNT: %1$s"
82
- msgstr ""
83
-
84
- #: classes/package/class.pack.php:913
85
- #, php-format
86
- msgid "ERROR: Cannot open created archive. Error code = %1$s"
87
- msgstr ""
88
-
89
- #: classes/package/class.pack.php:918
90
- msgid "ERROR: Archive is not valid zip archive."
91
- msgstr ""
92
-
93
- #: classes/package/class.pack.php:922
94
- msgid "ERROR: Archive doesn't pass consistency check."
95
- msgstr ""
96
-
97
- #: classes/package/class.pack.php:927
98
- msgid "ERROR: Archive checksum is bad."
99
- msgstr ""
100
-
101
- #: classes/package/class.pack.php:938
102
- msgid "ARCHIVE CONSISTENCY TEST: Pass"
103
- msgstr ""
104
-
105
- #: classes/package/duparchive/class.pack.archive.duparchive.php:44
106
- msgid "Package build appears stuck so marking package as failed. Is the Max Worker Time set too high?."
107
- msgstr ""
108
-
109
- #: classes/package/duparchive/class.pack.archive.duparchive.php:45
110
- msgid "Build Failure"
111
- msgstr ""
112
-
113
- #: classes/package/duparchive/class.pack.archive.duparchive.php:83
114
- msgid "Click on \"Resolve This\" button to fix the JSON settings."
115
- msgstr ""
116
-
117
- #: classes/package/duparchive/class.pack.archive.duparchive.php:95
118
- #, php-format
119
- msgid "ERROR: Can't find Scanfile %s. Please ensure there no non-English characters in the package or schedule name."
120
- msgstr ""
121
-
122
- #: classes/package/duparchive/class.pack.archive.duparchive.php:214
123
- msgid "Problem adding items to archive."
124
- msgstr ""
125
-
126
- #: classes/package/duparchive/class.pack.archive.duparchive.php:216
127
- msgid "Problems adding items to archive."
128
- msgstr ""
129
-
130
- #: classes/package/duparchive/class.pack.archive.duparchive.php:314
131
- msgid "Critical failure present in validation"
132
- msgstr ""
133
-
134
- #: classes/ui/class.ui.dialog.php:95
135
- msgid "Processing please wait..."
136
- msgstr ""
137
-
138
- #: classes/ui/class.ui.dialog.php:98
139
- msgid "OK"
140
- msgstr ""
141
-
142
- #: classes/ui/class.ui.dialog.php:99 deactivation.php:135
143
- msgid "Cancel"
144
- msgstr ""
145
-
146
- #: classes/ui/class.ui.notice.php:47
147
- msgid "Safe Mode:"
148
- msgstr ""
149
-
150
- #: classes/ui/class.ui.notice.php:48
151
- msgid "During the install safe mode was enabled deactivating all plugins.<br/> Please be sure to "
152
- msgstr ""
153
-
154
- #: classes/ui/class.ui.notice.php:49
155
- msgid "re-activate the plugins"
156
- msgstr ""
157
-
158
- #: classes/ui/class.ui.notice.php:56
159
- #: views/tools/diagnostics/information.php:158
160
- msgid "This site has been successfully migrated!"
161
- msgstr ""
162
-
163
- #: classes/ui/class.ui.notice.php:57
164
- msgid "Final step(s):"
165
- msgstr ""
166
-
167
- #: classes/ui/class.ui.notice.php:58
168
- msgid "This message will be removed after all installer files are removed. Installer files must be removed to maintain a secure site. Click the link above or button below to remove all installer files and complete the migration."
169
- msgstr ""
170
-
171
- #: classes/ui/class.ui.notice.php:62
172
- msgid "Remove Installation Files Now!"
173
- msgstr ""
174
-
175
- #: classes/ui/class.ui.notice.php:63
176
- msgid "Optionally, Review Duplicator at WordPress.org..."
177
- msgstr ""
178
-
179
- #: classes/ui/class.ui.notice.php:69
180
- msgid "Migration Almost Complete!"
181
- msgstr ""
182
-
183
- #: classes/ui/class.ui.notice.php:70
184
- msgid "Reserved Duplicator installation files have been detected in the root directory. Please delete these installation files to avoid security issues. <br/> Go to:Duplicator > Tools > Information >Stored Data and click the \"Remove Installation Files\" button"
185
- msgstr ""
186
-
187
- #: classes/ui/class.ui.notice.php:76
188
- msgid "Take me there now!"
189
- msgstr ""
190
-
191
- #: classes/ui/class.ui.notice.php:91
192
- msgid "Redirecting Please Wait..."
193
- msgstr ""
194
-
195
- #: classes/ui/class.ui.notice.php:94
196
- msgid "Invalid token permissions to perform this request."
197
- msgstr ""
198
-
199
- #: classes/ui/class.ui.notice.php:117
200
- #, php-format
201
- msgid "Activate %s"
202
- msgstr ""
203
-
204
- #: classes/ui/class.ui.screen.base.php:44
205
- msgid "<b>Need Help?</b> Please check out these resources first:<ul>"
206
- msgstr ""
207
-
208
- #: classes/ui/class.ui.screen.base.php:52 views/settings/gopro.php:218
209
- #: views/tools/diagnostics/main.php:45
210
- msgid "Support"
211
- msgstr ""
212
-
213
- #: classes/ui/class.ui.screen.base.php:65
214
- msgid "Resources"
215
- msgstr ""
216
-
217
- #: classes/ui/class.ui.screen.base.php:66
218
- msgid "Knowledge Base"
219
- msgstr ""
220
-
221
- #: classes/ui/class.ui.screen.base.php:67
222
- msgid "Full User Guide"
223
- msgstr ""
224
-
225
- #: classes/ui/class.ui.screen.base.php:68
226
- msgid "Technical FAQs"
227
- msgstr ""
228
-
229
- #: classes/ui/class.ui.screen.base.php:69
230
- msgid "Package Settings"
231
- msgstr ""
232
-
233
- #: classes/utilities/class.u.php:64
234
- msgid "32-bit"
235
- msgstr ""
236
-
237
- #: classes/utilities/class.u.php:67
238
- msgid "64-bit"
239
- msgstr ""
240
-
241
- #: classes/utilities/class.u.php:70
242
- msgid "Unknown"
243
- msgstr ""
244
-
245
- #: classes/utilities/class.u.php:496
246
- msgid "You do not have sufficient permissions to access this page."
247
- msgstr ""
248
-
249
- #: ctrls/ctrl.package.php:175
250
- msgid "Error building DupArchive package"
251
- msgstr ""
252
-
253
- #: ctrls/ctrl.package.php:303
254
- msgid "An unathorized security request was made to this page. Please try again!"
255
- msgstr ""
256
-
257
- #: ctrls/ctrl.package.php:325
258
- msgid "Active package object error"
259
- msgstr ""
260
-
261
- #: ctrls/ctrl.package.php:488 ctrls/ctrl.package.php:506
262
- msgid "Couldn't find a local copy of the file requested."
263
- msgstr ""
264
-
265
- #: deactivation.php:48
266
- msgid "Need help? We are ready to answer your questions."
267
- msgstr ""
268
-
269
- #: deactivation.php:48
270
- msgid "Contact Support"
271
- msgstr ""
272
-
273
- #: deactivation.php:53
274
- msgid "It's not working on my server."
275
- msgstr ""
276
-
277
- #: deactivation.php:55
278
- msgid "Kindly share what didn't work so we can fix it in future updates..."
279
- msgstr ""
280
-
281
- #: deactivation.php:60
282
- msgid "It's too confusing to understand."
283
- msgstr ""
284
-
285
- #: deactivation.php:62
286
- msgid "Please tell us what is not clear so that we can improve it."
287
- msgstr ""
288
-
289
- #: deactivation.php:67
290
- msgid "I found a different plugin that I like better."
291
- msgstr ""
292
-
293
- #: deactivation.php:69
294
- msgid "What's the plugin name?"
295
- msgstr ""
296
-
297
- #: deactivation.php:73
298
- msgid "It does not do what I need."
299
- msgstr ""
300
-
301
- #: deactivation.php:75
302
- msgid "What does it need to do?"
303
- msgstr ""
304
-
305
- #: deactivation.php:79
306
- msgid "It's a temporary deactivation, I use the plugin all the time."
307
- msgstr ""
308
-
309
- #: deactivation.php:85
310
- #, php-format
311
- msgid "I'm switching over to the %s"
312
- msgstr ""
313
-
314
- #: deactivation.php:85
315
- msgid "Pro version"
316
- msgstr ""
317
-
318
- #: deactivation.php:128
319
- msgid "Quick Feedback"
320
- msgstr ""
321
-
322
- #: deactivation.php:129
323
- msgid "If you have a moment, please let us know why you are deactivating"
324
- msgstr ""
325
-
326
- #: deactivation.php:136 deactivation.php:344
327
- msgid "Skip & Deactivate"
328
- msgstr ""
329
-
330
- #: deactivation.php:137
331
- msgid "Send & Deactivate"
332
- msgstr ""
333
-
334
- #: deactivation.php:140
335
- msgid "Your response is sent anonymously."
336
- msgstr ""
337
-
338
- #: deactivation.php:235 deactivation.php:236
339
- msgid "Processing"
340
- msgstr ""
341
-
342
- #: deactivation.php:283
343
- msgid "Please tell us the reason so we can improve it."
344
- msgstr ""
345
-
346
- #: duplicator.php:398 views/packages/details/controller.php:48
347
- #: views/packages/main/packages.php:88 views/packages/main/s1.setup1.php:72
348
- #: views/packages/main/s2.scan1.php:185 views/packages/main/s3.build.php:90
349
- #: views/settings/controller.php:23
350
- msgid "Packages"
351
- msgstr ""
352
-
353
- #: duplicator.php:404 views/tools/controller.php:19
354
- msgid "Tools"
355
- msgstr ""
356
-
357
- #: duplicator.php:409 views/packages/main/packages.php:85
358
- #: views/settings/controller.php:19 views/settings/general.php:179
359
- msgid "Settings"
360
- msgstr ""
361
-
362
- #: duplicator.php:413
363
- msgid "Go Pro!"
364
- msgstr ""
365
-
366
- #: duplicator.php:481 views/settings/license.php:8
367
- msgid "Manage"
368
- msgstr ""
369
-
370
- #: duplicator.php:498 views/packages/main/packages.php:82
371
- msgid "Get Help"
372
- msgstr ""
373
-
374
- #: duplicator.php:498
375
- msgid "Go Pro"
376
- msgstr ""
377
-
378
- #: views/packages/details/controller.php:13
379
- msgid "package log"
380
- msgstr ""
381
-
382
- #: views/packages/details/controller.php:14
383
- msgid "FAQ"
384
- msgstr ""
385
-
386
- #: views/packages/details/controller.php:15
387
- msgid "resources page"
388
- msgstr ""
389
-
390
- #: views/packages/details/controller.php:34
391
- msgid "This package contains an error. Please review the "
392
- msgstr ""
393
-
394
- #: views/packages/details/controller.php:34
395
- msgid " for details."
396
- msgstr ""
397
-
398
- #: views/packages/details/controller.php:35
399
- msgid "For help visit the "
400
- msgstr ""
401
-
402
- #: views/packages/details/controller.php:35
403
- msgid " and "
404
- msgstr ""
405
-
406
- #: views/packages/details/controller.php:42
407
- msgid "Details"
408
- msgstr ""
409
-
410
- #: views/packages/details/controller.php:45
411
- msgid "Transfer"
412
- msgstr ""
413
-
414
- #: views/packages/details/detail.php:63
415
- msgid "Invalid Package ID request. Please try again!"
416
- msgstr ""
417
-
418
- #: views/packages/details/detail.php:75 views/settings/controller.php:22
419
- #: views/tools/diagnostics/inc.settings.php:29
420
- msgid "General"
421
- msgstr ""
422
-
423
- #: views/packages/details/detail.php:81 views/packages/details/detail.php:184
424
- #: views/packages/main/packages.php:138 views/packages/main/s1.setup2.php:73
425
- #: views/packages/main/s1.setup2.php:99 views/packages/main/s2.scan3.php:529
426
- #: views/packages/main/s3.build.php:133
427
- msgid "Name"
428
- msgstr ""
429
-
430
- #: views/packages/details/detail.php:85
431
- msgid "ID"
432
- msgstr ""
433
-
434
- #: views/packages/details/detail.php:86
435
- msgid "Hash"
436
- msgstr ""
437
-
438
- #: views/packages/details/detail.php:87
439
- msgid "Full Name"
440
- msgstr ""
441
-
442
- #: views/packages/details/detail.php:92 views/packages/main/s1.setup2.php:82
443
- #: views/packages/main/s2.scan3.php:530
444
- msgid "Notes"
445
- msgstr ""
446
-
447
- #: views/packages/details/detail.php:93
448
- msgid "- no notes -"
449
- msgstr ""
450
-
451
- #: views/packages/details/detail.php:96
452
- msgid "Versions"
453
- msgstr ""
454
-
455
- #: views/packages/details/detail.php:100 views/packages/main/s2.scan2.php:106
456
- msgid "WordPress"
457
- msgstr ""
458
-
459
- #: views/packages/details/detail.php:100 views/packages/details/detail.php:101
460
- #: views/packages/details/detail.php:103 views/packages/details/detail.php:104
461
- #: views/packages/details/detail.php:118
462
- msgid "- unknown -"
463
- msgstr ""
464
-
465
- #: views/packages/details/detail.php:101
466
- msgid "PHP"
467
- msgstr ""
468
-
469
- #: views/packages/details/detail.php:102
470
- msgid "Mysql"
471
- msgstr ""
472
-
473
- #: views/packages/details/detail.php:109
474
- msgid "Runtime"
475
- msgstr ""
476
-
477
- #: views/packages/details/detail.php:110
478
- msgid "error running"
479
- msgstr ""
480
-
481
- #: views/packages/details/detail.php:113
482
- msgid "Status"
483
- msgstr ""
484
-
485
- #: views/packages/details/detail.php:114
486
- msgid "completed"
487
- msgstr ""
488
-
489
- #: views/packages/details/detail.php:114
490
- msgid "in-complete"
491
- msgstr ""
492
-
493
- #: views/packages/details/detail.php:117 views/packages/details/detail.php:366
494
- #: views/packages/main/s1.setup2.php:472
495
- #: views/tools/diagnostics/inc.settings.php:118
496
- msgid "User"
497
- msgstr ""
498
-
499
- #: views/packages/details/detail.php:121 views/packages/details/detail.php:269
500
- #: views/packages/main/s1.setup2.php:158 views/packages/main/s2.scan3.php:28
501
- #: views/packages/main/s2.scan3.php:586 views/packages/main/s2.scan3.php:638
502
- msgid "Files"
503
- msgstr ""
504
-
505
- #: views/packages/details/detail.php:129
506
- msgid "Log"
507
- msgstr ""
508
-
509
- #: views/packages/details/detail.php:130
510
- msgid "Share"
511
- msgstr ""
512
-
513
- #: views/packages/details/detail.php:138 views/packages/details/detail.php:226
514
- #: views/packages/main/packages.php:208 views/packages/main/s1.setup2.php:142
515
- #: views/packages/main/s2.scan3.php:21 views/packages/main/s3.build.php:146
516
- #: views/settings/packages.php:204
517
- msgid "Archive"
518
- msgstr ""
519
-
520
- #: views/packages/details/detail.php:142 views/packages/details/detail.php:325
521
- #: views/packages/main/packages.php:205 views/packages/main/s1.setup2.php:381
522
- #: views/packages/main/s3.build.php:143
523
- msgid "Installer"
524
- msgstr ""
525
-
526
- #: views/packages/details/detail.php:146 views/packages/details/detail.php:362
527
- #: views/packages/main/s1.setup2.php:159 views/packages/main/s1.setup2.php:468
528
- #: views/packages/main/s2.scan3.php:365 views/packages/main/s2.scan3.php:535
529
- #: views/settings/packages.php:70
530
- msgid "Database"
531
- msgstr ""
532
-
533
- #: views/packages/details/detail.php:160
534
- msgid "Download Links"
535
- msgstr ""
536
-
537
- #: views/packages/details/detail.php:163
538
- msgid "The following links contain sensitive data. Please share with caution!"
539
- msgstr ""
540
-
541
- #: views/packages/details/detail.php:169
542
- msgid "The database SQL script is a quick link to your database backup script. An exact copy is also stored in the package."
543
- msgstr ""
544
-
545
- #: views/packages/details/detail.php:177 views/packages/main/s1.setup2.php:92
546
- #: views/settings/controller.php:25 views/settings/general.php:110
547
- msgid "Storage"
548
- msgstr ""
549
-
550
- #: views/packages/details/detail.php:185 views/packages/details/detail.php:286
551
- #: views/packages/main/s1.setup2.php:100 views/settings/license.php:12
552
- msgid "Type"
553
- msgstr ""
554
-
555
- #: views/packages/details/detail.php:186 views/packages/main/s1.setup2.php:101
556
- msgid "Location"
557
- msgstr ""
558
-
559
- #: views/packages/details/detail.php:191 views/packages/main/s1.setup2.php:106
560
- msgid "Default"
561
- msgstr ""
562
-
563
- #: views/packages/details/detail.php:192 views/packages/main/s1.setup2.php:107
564
- msgid "Local"
565
- msgstr ""
566
-
567
- #: views/packages/details/detail.php:203 views/packages/main/s1.setup2.php:119
568
- #, php-format
569
- msgid "%1$s, %2$s, %3$s, %4$s, %5$s and other storage options available in"
570
- msgstr ""
571
-
572
- #: views/packages/details/detail.php:204 views/packages/main/s1.setup2.php:120
573
- #: views/packages/main/s2.scan3.php:485 views/packages/main/s2.scan3.php:497
574
- #: views/packages/main/s3.build.php:21
575
- msgid "Duplicator Pro"
576
- msgstr ""
577
-
578
- #: views/packages/details/detail.php:206 views/packages/main/s1.setup2.php:122
579
- msgid "Additional Storage:"
580
- msgstr ""
581
-
582
- #: views/packages/details/detail.php:207 views/packages/main/s1.setup2.php:123
583
- msgid "Duplicator Pro allows you to create a package and then store it at a custom location on this server or to a cloud based location such as Google Drive, Amazon, Dropbox or FTP."
584
- msgstr ""
585
-
586
- #: views/packages/details/detail.php:234 views/packages/details/detail.php:290
587
- #: views/packages/main/s1.setup2.php:260
588
- msgid "Build Mode"
589
- msgstr ""
590
-
591
- #: views/packages/details/detail.php:241
592
- msgid "Database Mode"
593
- msgstr ""
594
-
595
- #: views/packages/details/detail.php:242
596
- msgid "Archive Database Only Enabled"
597
- msgstr ""
598
-
599
- #: views/packages/details/detail.php:246 views/packages/details/detail.php:303
600
- msgid "Filters"
601
- msgstr ""
602
-
603
- #: views/packages/details/detail.php:250 views/packages/main/s2.scan3.php:564
604
- #: views/packages/main/s2.scan3.php:629
605
- msgid "Directories"
606
- msgstr ""
607
-
608
- #: views/packages/details/detail.php:254 views/packages/details/detail.php:264
609
- #: views/packages/details/detail.php:273 views/packages/details/detail.php:312
610
- msgid "- no filters -"
611
- msgstr ""
612
-
613
- #: views/packages/details/detail.php:260 views/packages/main/s2.scan3.php:575
614
- msgid "Extensions"
615
- msgstr ""
616
-
617
- #: views/packages/details/detail.php:283 views/packages/details/detail.php:395
618
- msgid "DATABASE"
619
- msgstr ""
620
-
621
- #: views/packages/details/detail.php:296 views/packages/main/s2.scan3.php:546
622
- msgid "MySQL Compatibility Mode Enabled"
623
- msgstr ""
624
-
625
- #: views/packages/details/detail.php:297 views/packages/main/s1.setup2.php:336
626
- #: views/packages/main/s2.scan2.php:76 views/packages/main/s2.scan2.php:87
627
- #: views/packages/main/s2.scan2.php:94 views/packages/main/s2.scan3.php:547
628
- msgid "details"
629
- msgstr ""
630
-
631
- #: views/packages/details/detail.php:307 views/packages/main/s2.scan3.php:393
632
- msgid "Tables"
633
- msgstr ""
634
-
635
- #: views/packages/details/detail.php:332
636
- msgid " Security"
637
- msgstr ""
638
-
639
- #: views/packages/details/detail.php:336
640
- msgid "Password Protection"
641
- msgstr ""
642
-
643
- #: views/packages/details/detail.php:345 views/packages/main/s1.setup2.php:431
644
- msgid "Show/Hide Password"
645
- msgstr ""
646
-
647
- #: views/packages/details/detail.php:355 views/packages/main/s1.setup2.php:457
648
- msgid " MySQL Server"
649
- msgstr ""
650
-
651
- #: views/packages/details/detail.php:358 views/packages/main/s1.setup2.php:460
652
- msgid "Host"
653
- msgstr ""
654
-
655
- #: views/packages/details/detail.php:359 views/packages/details/detail.php:363
656
- #: views/packages/details/detail.php:367
657
- msgid "- not set -"
658
- msgstr ""
659
-
660
- #: views/packages/details/detail.php:375
661
- msgid "View Package Object"
662
- msgstr ""
663
-
664
- #: views/packages/details/detail.php:392
665
- msgid "Package File Links"
666
- msgstr ""
667
-
668
- #: views/packages/details/detail.php:396
669
- msgid "PACKAGE"
670
- msgstr ""
671
-
672
- #: views/packages/details/detail.php:397
673
- msgid "INSTALLER"
674
- msgstr ""
675
-
676
- #: views/packages/details/detail.php:398
677
- msgid "LOG"
678
- msgstr ""
679
-
680
- #: views/packages/details/transfer.php:15
681
- msgid "Transfer your packages to multiple locations with Duplicator Pro"
682
- msgstr ""
683
-
684
- #: views/packages/details/transfer.php:20 views/settings/storage.php:19
685
- msgid "Amazon S3"
686
- msgstr ""
687
-
688
- #: views/packages/details/transfer.php:21
689
- msgid "Dropbox"
690
- msgstr ""
691
-
692
- #: views/packages/details/transfer.php:22 views/settings/storage.php:21
693
- msgid "Google Drive"
694
- msgstr ""
695
-
696
- #: views/packages/details/transfer.php:23 views/settings/storage.php:22
697
- msgid "One Drive"
698
- msgstr ""
699
-
700
- #: views/packages/details/transfer.php:24 views/settings/storage.php:23
701
- msgid "FTP &amp; SFTP"
702
- msgstr ""
703
-
704
- #: views/packages/details/transfer.php:25 views/settings/storage.php:24
705
- msgid "Custom Directory"
706
- msgstr ""
707
-
708
- #: views/packages/details/transfer.php:29
709
- msgid "Set up a one-time storage location and automatically push the package to your destination."
710
- msgstr ""
711
-
712
- #: views/packages/details/transfer.php:35 views/settings/schedule.php:22
713
- #: views/settings/storage.php:34 views/tools/templates.php:23
714
- msgid "Learn More"
715
- msgstr ""
716
-
717
- #: views/packages/main/controller.php:9
718
- msgid "An invalid request was made to this page."
719
- msgstr ""
720
-
721
- #: views/packages/main/controller.php:10
722
- msgid "Please retry by going to the"
723
- msgstr ""
724
-
725
- #: views/packages/main/controller.php:11
726
- msgid "Packages Screen"
727
- msgstr ""
728
-
729
- #: views/packages/main/controller.php:59
730
- msgid "Packages &raquo; All"
731
- msgstr ""
732
-
733
- #: views/packages/main/controller.php:63 views/packages/main/controller.php:67
734
- #: views/packages/main/controller.php:71
735
- msgid "Packages &raquo; New"
736
- msgstr ""
737
-
738
- #: views/packages/main/packages.php:77
739
- msgid "Bulk Actions"
740
- msgstr ""
741
-
742
- #: views/packages/main/packages.php:78
743
- msgid "Delete selected package(s)"
744
- msgstr ""
745
-
746
- #: views/packages/main/packages.php:78
747
- msgid "Delete"
748
- msgstr ""
749
-
750
- #: views/packages/main/packages.php:80
751
- msgid "Apply"
752
- msgstr ""
753
-
754
- #: views/packages/main/packages.php:98 views/packages/main/s1.setup1.php:73
755
- #: views/packages/main/s2.scan1.php:186 views/packages/main/s3.build.php:101
756
- msgid "Create New"
757
- msgstr ""
758
-
759
- #: views/packages/main/packages.php:114 views/packages/main/packages.php:148
760
- msgid "No Packages Found."
761
- msgstr ""
762
-
763
- #: views/packages/main/packages.php:115 views/packages/main/packages.php:149
764
- msgid "Click the 'Create New' button to build a package."
765
- msgstr ""
766
-
767
- #: views/packages/main/packages.php:117 views/packages/main/packages.php:151
768
- msgid "New to Duplicator?"
769
- msgstr ""
770
-
771
- #: views/packages/main/packages.php:119 views/packages/main/packages.php:153
772
- msgid "Check out the 'Quick Start' guide!"
773
- msgstr ""
774
-
775
- #: views/packages/main/packages.php:135
776
- msgid "Select all packages"
777
- msgstr ""
778
-
779
- #: views/packages/main/packages.php:136
780
- msgid "Created"
781
- msgstr ""
782
-
783
- #: views/packages/main/packages.php:137 views/packages/main/s2.scan3.php:88
784
- #: views/packages/main/s2.scan3.php:392
785
- msgid "Size"
786
- msgstr ""
787
-
788
- #: views/packages/main/packages.php:140 views/packages/main/s2.scan3.php:528
789
- msgid "Package"
790
- msgstr ""
791
-
792
- #: views/packages/main/packages.php:189
793
- msgid "Archive created as zip file"
794
- msgstr ""
795
-
796
- #: views/packages/main/packages.php:190
797
- msgid "Archive created as daf file"
798
- msgstr ""
799
-
800
- #: views/packages/main/packages.php:195 views/packages/main/s1.setup2.php:148
801
- #: views/packages/main/s2.scan3.php:35
802
- msgid "Database Only"
803
- msgstr ""
804
-
805
- #: views/packages/main/packages.php:199
806
- msgid "Package Build Running"
807
- msgstr ""
808
-
809
- #: views/packages/main/packages.php:200
810
- msgid "To stop or reset this package build goto Settings > Advanced > Reset Packages"
811
- msgstr ""
812
-
813
- #: views/packages/main/packages.php:210 views/packages/main/packages.php:228
814
- msgid "Package Details"
815
- msgstr ""
816
-
817
- #: views/packages/main/packages.php:226
818
- msgid "Error Processing"
819
- msgstr ""
820
-
821
- #: views/packages/main/packages.php:246
822
- msgid "Current Server Time"
823
- msgstr ""
824
-
825
- #: views/packages/main/packages.php:249 views/packages/main/s3.build.php:321
826
- msgid "Time"
827
- msgstr ""
828
-
829
- #: views/packages/main/packages.php:258
830
- msgid "Items"
831
- msgstr ""
832
-
833
- #: views/packages/main/packages.php:268
834
- msgid "Bulk Action Required"
835
- msgstr ""
836
-
837
- #: views/packages/main/packages.php:270
838
- msgid "No selections made! Please select an action from the \"Bulk Actions\" drop down menu."
839
- msgstr ""
840
-
841
- #: views/packages/main/packages.php:274
842
- msgid "Selection Required"
843
- msgstr ""
844
-
845
- #: views/packages/main/packages.php:276
846
- msgid "No selections made! Please select at least one package to delete."
847
- msgstr ""
848
-
849
- #: views/packages/main/packages.php:280
850
- msgid "Delete Packages?"
851
- msgstr ""
852
-
853
- #: views/packages/main/packages.php:281
854
- msgid "Are you sure you want to delete the selected package(s)?"
855
- msgstr ""
856
-
857
- #: views/packages/main/packages.php:282
858
- msgid "Removing Packages, Please Wait..."
859
- msgstr ""
860
-
861
- #: views/packages/main/packages.php:289
862
- msgid "Duplicator Help"
863
- msgstr ""
864
-
865
- #: views/packages/main/packages.php:294
866
- msgid "Alert!"
867
- msgstr ""
868
-
869
- #: views/packages/main/packages.php:295
870
- msgid "A package is being processed. Retry later."
871
- msgstr ""
872
-
873
- #: views/packages/main/packages.php:302
874
- msgid "Common Questions:"
875
- msgstr ""
876
-
877
- #: views/packages/main/packages.php:303
878
- msgid "How do I create a package"
879
- msgstr ""
880
-
881
- #: views/packages/main/packages.php:304
882
- msgid "How do I install a package?"
883
- msgstr ""
884
-
885
- #: views/packages/main/packages.php:305
886
- msgid "Frequently Asked Questions!"
887
- msgstr ""
888
-
889
- #: views/packages/main/packages.php:308
890
- msgid "Other Resources:"
891
- msgstr ""
892
-
893
- #: views/packages/main/packages.php:309
894
- msgid "Need help with the plugin?"
895
- msgstr ""
896
-
897
- #: views/packages/main/packages.php:310
898
- msgid "Have an idea for the plugin?"
899
- msgstr ""
900
-
901
- #: views/packages/main/packages.php:312
902
- msgid "Help review the plugin!"
903
- msgstr ""
904
-
905
- #: views/packages/main/s1.setup1.php:12
906
- msgid "Package settings have been reset."
907
- msgstr ""
908
-
909
- #: views/packages/main/s1.setup1.php:62 views/packages/main/s1.setup2.php:401
910
- #: views/packages/main/s2.scan1.php:175 views/packages/main/s2.scan2.php:56
911
- #: views/packages/main/s3.build.php:79
912
- msgid "Setup"
913
- msgstr ""
914
-
915
- #: views/packages/main/s1.setup1.php:63 views/packages/main/s2.scan1.php:176
916
- #: views/packages/main/s3.build.php:80
917
- msgid "Scan"
918
- msgstr ""
919
-
920
- #: views/packages/main/s1.setup1.php:64 views/packages/main/s2.scan1.php:177
921
- #: views/packages/main/s2.scan1.php:269 views/packages/main/s3.build.php:81
922
- msgid "Build"
923
- msgstr ""
924
-
925
- #: views/packages/main/s1.setup1.php:67
926
- msgid "Step 1: Package Setup"
927
- msgstr ""
928
-
929
- #: views/packages/main/s1.setup1.php:90
930
- msgid "Requirements:"
931
- msgstr ""
932
-
933
- #: views/packages/main/s1.setup1.php:99
934
- msgid "System requirements must pass for the Duplicator to work properly. Click each link for details."
935
- msgstr ""
936
-
937
- #: views/packages/main/s1.setup1.php:105
938
- msgid "PHP Support"
939
- msgstr ""
940
-
941
- #: views/packages/main/s1.setup1.php:111 views/packages/main/s2.scan2.php:68
942
- msgid "PHP Version"
943
- msgstr ""
944
-
945
- #: views/packages/main/s1.setup1.php:113
946
- msgid "PHP versions 5.2.9+ or higher is required."
947
- msgstr ""
948
-
949
- #: views/packages/main/s1.setup1.php:117
950
- msgid "Zip Archive Enabled"
951
- msgstr ""
952
-
953
- #: views/packages/main/s1.setup1.php:121
954
- msgid "ZipArchive extension is required or"
955
- msgstr ""
956
-
957
- #: views/packages/main/s1.setup1.php:122
958
- msgid "Switch to DupArchive"
959
- msgstr ""
960
-
961
- #: views/packages/main/s1.setup1.php:123
962
- msgid "to by-pass this requirement."
963
- msgstr ""
964
-
965
- #: views/packages/main/s1.setup1.php:129
966
- msgid "Safe Mode Off"
967
- msgstr ""
968
-
969
- #: views/packages/main/s1.setup1.php:131
970
- msgid "Safe Mode should be set to Off in you php.ini file and is deprecated as of PHP 5.3.0."
971
- msgstr ""
972
-
973
- #: views/packages/main/s1.setup1.php:134 views/packages/main/s1.setup1.php:139
974
- #: views/packages/main/s1.setup1.php:144
975
- msgid "Function"
976
- msgstr ""
977
-
978
- #: views/packages/main/s1.setup1.php:150
979
- msgid "For any issues in this section please contact your hosting provider or server administrator. For additional information see our online documentation."
980
- msgstr ""
981
-
982
- #: views/packages/main/s1.setup1.php:158
983
- msgid "Required Paths"
984
- msgstr ""
985
-
986
- #: views/packages/main/s1.setup1.php:178
987
- msgid "If the root WordPress path is not writable by PHP on some systems this can cause issues."
988
- msgstr ""
989
-
990
- #: views/packages/main/s1.setup1.php:181
991
- msgid "If Duplicator does not have enough permissions then you will need to manually create the paths above. &nbsp; "
992
- msgstr ""
993
-
994
- #: views/packages/main/s1.setup1.php:190
995
- msgid "Server Support"
996
- msgstr ""
997
-
998
- #: views/packages/main/s1.setup1.php:196
999
- msgid "MySQL Version"
1000
- msgstr ""
1001
-
1002
- #: views/packages/main/s1.setup1.php:200
1003
- msgid "MySQLi Support"
1004
- msgstr ""
1005
-
1006
- #: views/packages/main/s1.setup1.php:206
1007
- msgid "MySQL version 5.0+ or better is required and the PHP MySQLi extension (note the trailing 'i') is also required. Contact your server administrator and request that mysqli extension and MySQL Server 5.0+ be installed."
1008
- msgstr ""
1009
-
1010
- #: views/packages/main/s1.setup1.php:207
1011
- #: views/tools/diagnostics/inc.data.php:26
1012
- msgid "more info"
1013
- msgstr ""
1014
-
1015
- #: views/packages/main/s1.setup1.php:216
1016
- msgid "Reserved Files"
1017
- msgstr ""
1018
-
1019
- #: views/packages/main/s1.setup1.php:221
1020
- msgid "None of the reserved files where found from a previous install. This means you are clear to create a new package."
1021
- msgstr ""
1022
-
1023
- #: views/packages/main/s1.setup1.php:229
1024
- msgid "WordPress Root Path:"
1025
- msgstr ""
1026
-
1027
- #: views/packages/main/s1.setup1.php:231
1028
- msgid "Remove Files Now"
1029
- msgstr ""
1030
-
1031
- #: views/packages/main/s1.setup2.php:76
1032
- msgid "Add Notes"
1033
- msgstr ""
1034
-
1035
- #: views/packages/main/s1.setup2.php:79
1036
- msgid "Toggle a default name"
1037
- msgstr ""
1038
-
1039
- #: views/packages/main/s1.setup2.php:146
1040
- msgid "File filter enabled"
1041
- msgstr ""
1042
-
1043
- #: views/packages/main/s1.setup2.php:147
1044
- msgid "Database filter enabled"
1045
- msgstr ""
1046
-
1047
- #: views/packages/main/s1.setup2.php:148 views/packages/main/s1.setup2.php:173
1048
- msgid "Archive Only the Database"
1049
- msgstr ""
1050
-
1051
- #: views/packages/main/s1.setup2.php:177
1052
- msgid "Enable File Filters"
1053
- msgstr ""
1054
-
1055
- #: views/packages/main/s1.setup2.php:179
1056
- msgid "File Filters:"
1057
- msgstr ""
1058
-
1059
- #: views/packages/main/s1.setup2.php:180
1060
- msgid "File filters allow you to ignore directories and file extensions. When creating a package only include the data you want and need. This helps to improve the overall archive build time and keep your backups simple and clean."
1061
- msgstr ""
1062
-
1063
- #: views/packages/main/s1.setup2.php:185 views/packages/main/s1.setup2.php:199
1064
- #: views/packages/main/s1.setup2.php:207
1065
- msgid "Separate all filters by semicolon"
1066
- msgstr ""
1067
-
1068
- #: views/packages/main/s1.setup2.php:187
1069
- msgid "Directories:"
1070
- msgstr ""
1071
-
1072
- #: views/packages/main/s1.setup2.php:188
1073
- msgid "Number of directories filtered"
1074
- msgstr ""
1075
-
1076
- #: views/packages/main/s1.setup2.php:192
1077
- msgid "root path"
1078
- msgstr ""
1079
-
1080
- #: views/packages/main/s1.setup2.php:193
1081
- msgid "wp-uploads"
1082
- msgstr ""
1083
-
1084
- #: views/packages/main/s1.setup2.php:194
1085
- msgid "cache"
1086
- msgstr ""
1087
-
1088
- #: views/packages/main/s1.setup2.php:195 views/packages/main/s1.setup2.php:203
1089
- #: views/packages/main/s1.setup2.php:215
1090
- msgid "(clear)"
1091
- msgstr ""
1092
-
1093
- #: views/packages/main/s1.setup2.php:199
1094
- msgid "File extensions"
1095
- msgstr ""
1096
-
1097
- #: views/packages/main/s1.setup2.php:201
1098
- msgid "media"
1099
- msgstr ""
1100
-
1101
- #: views/packages/main/s1.setup2.php:202
1102
- msgid "archive"
1103
- msgstr ""
1104
-
1105
- #: views/packages/main/s1.setup2.php:209
1106
- msgid "Files:"
1107
- msgstr ""
1108
-
1109
- #: views/packages/main/s1.setup2.php:210
1110
- msgid "Number of files filtered"
1111
- msgstr ""
1112
-
1113
- #: views/packages/main/s1.setup2.php:214
1114
- msgid "(file path)"
1115
- msgstr ""
1116
-
1117
- #: views/packages/main/s1.setup2.php:220
1118
- msgid "The directory, file and extensions paths above will be excluded from the archive file if enabled is checked."
1119
- msgstr ""
1120
-
1121
- #: views/packages/main/s1.setup2.php:221
1122
- msgid "Use the full path for directories and files with semicolons to separate all paths."
1123
- msgstr ""
1124
-
1125
- #: views/packages/main/s1.setup2.php:231
1126
- msgid "This option has automatically been checked because you have opted for a <i class='fa fa-random'></i> Two-Part Install Process. Please complete the package build and continue with the "
1127
- msgstr ""
1128
-
1129
- #: views/packages/main/s1.setup2.php:234 views/packages/main/s3.build.php:279
1130
- msgid "Quick Start Two-Part Install Instructions"
1131
- msgstr ""
1132
-
1133
- #: views/packages/main/s1.setup2.php:238
1134
- msgid "<b>Overview:</b><br/> This advanced option excludes all files from the archive. Only the database and a copy of the installer.php will be included in the archive.zip file. The option can be used for backing up and moving only the database."
1135
- msgstr ""
1136
-
1137
- #: views/packages/main/s1.setup2.php:243
1138
- msgid "<b><i class='fa fa-exclamation-circle'></i> Notice:</b><br/>"
1139
- msgstr ""
1140
-
1141
- #: views/packages/main/s1.setup2.php:245
1142
- msgid "Please use caution when installing only the database over an existing site and be sure the correct files correspond with the database. For example, if WordPress 4.6 is on this site and you copy the database to a host that has WordPress 4.8 files then the source code of the files will not be in sync with the database causing possible errors. If you’re immediately moving the source files with the database then you can ignore this notice. Please use this advanced feature with caution!"
1143
- msgstr ""
1144
-
1145
- #: views/packages/main/s1.setup2.php:267
1146
- msgid "Enable Table Filters"
1147
- msgstr ""
1148
-
1149
- #: views/packages/main/s1.setup2.php:269
1150
- msgid "Enable Table Filters:"
1151
- msgstr ""
1152
-
1153
- #: views/packages/main/s1.setup2.php:270
1154
- msgid "Checked tables will not be added to the database script. Excluding certain tables can possibly cause your site or plugins to not work correctly after install!"
1155
- msgstr ""
1156
-
1157
- #: views/packages/main/s1.setup2.php:276
1158
- msgid "Include All"
1159
- msgstr ""
1160
-
1161
- #: views/packages/main/s1.setup2.php:277
1162
- msgid "Exclude All"
1163
- msgstr ""
1164
-
1165
- #: views/packages/main/s1.setup2.php:321
1166
- msgid "Checked tables will be <u>excluded</u> from the database script. "
1167
- msgstr ""
1168
-
1169
- #: views/packages/main/s1.setup2.php:322
1170
- msgid "Excluding certain tables can cause your site or plugins to not work correctly after install!<br/>"
1171
- msgstr ""
1172
-
1173
- #: views/packages/main/s1.setup2.php:323
1174
- msgid "<i class='core-table-info'> Use caution when excluding tables! It is highly recommended to not exclude WordPress core tables*, unless you know the impact.</i>"
1175
- msgstr ""
1176
-
1177
- #: views/packages/main/s1.setup2.php:328
1178
- msgid "Compatibility Mode"
1179
- msgstr ""
1180
-
1181
- #: views/packages/main/s1.setup2.php:330
1182
- msgid "Compatibility Mode:"
1183
- msgstr ""
1184
-
1185
- #: views/packages/main/s1.setup2.php:331
1186
- msgid "This is an advanced database backwards compatibility feature that should ONLY be used if having problems installing packages. If the database server version is lower than the version where the package was built then these options may help generate a script that is more compliant with the older database server. It is recommended to try each option separately starting with mysql40."
1187
- msgstr ""
1188
-
1189
- #: views/packages/main/s1.setup2.php:352
1190
- msgid "mysql40"
1191
- msgstr ""
1192
-
1193
- #: views/packages/main/s1.setup2.php:356
1194
- msgid "no_table_options"
1195
- msgstr ""
1196
-
1197
- #: views/packages/main/s1.setup2.php:360
1198
- msgid "no_key_options"
1199
- msgstr ""
1200
-
1201
- #: views/packages/main/s1.setup2.php:364
1202
- msgid "no_field_options"
1203
- msgstr ""
1204
-
1205
- #: views/packages/main/s1.setup2.php:369
1206
- msgid "This option is only available with mysqldump mode."
1207
- msgstr ""
1208
-
1209
- #: views/packages/main/s1.setup2.php:382
1210
- msgid "Installer password protection is on"
1211
- msgstr ""
1212
-
1213
- #: views/packages/main/s1.setup2.php:383
1214
- msgid "Installer password protection is off"
1215
- msgstr ""
1216
-
1217
- #: views/packages/main/s1.setup2.php:390
1218
- msgid "All values in this section are"
1219
- msgstr ""
1220
-
1221
- #: views/packages/main/s1.setup2.php:390
1222
- msgid "optional"
1223
- msgstr ""
1224
-
1225
- #: views/packages/main/s1.setup2.php:392
1226
- msgid "Setup/Prefills"
1227
- msgstr ""
1228
-
1229
- #: views/packages/main/s1.setup2.php:393
1230
- msgid "All values in this section are OPTIONAL! If you know ahead of time the database input fields the installer will use, then you can optionally enter them here and they will be prefilled at install time. Otherwise you can just enter them in at install time and ignore all these options in the Installer section."
1231
- msgstr ""
1232
-
1233
- #: views/packages/main/s1.setup2.php:404 views/packages/main/s1.setup2.php:409
1234
- msgid "Branding"
1235
- msgstr ""
1236
-
1237
- #: views/packages/main/s1.setup2.php:407
1238
- msgid "Available with Duplicator Pro - Freelancer!"
1239
- msgstr ""
1240
-
1241
- #: views/packages/main/s1.setup2.php:410
1242
- msgid "Branding is a way to customize the installer look and feel. With branding you can create multiple brands of installers."
1243
- msgstr ""
1244
-
1245
- #: views/packages/main/s1.setup2.php:415
1246
- msgid "Security"
1247
- msgstr ""
1248
-
1249
- #: views/packages/main/s1.setup2.php:422
1250
- msgid "Enable Password Protection"
1251
- msgstr ""
1252
-
1253
- #: views/packages/main/s1.setup2.php:424
1254
- msgid "Security:"
1255
- msgstr ""
1256
-
1257
- #: views/packages/main/s1.setup2.php:425
1258
- msgid "Enabling this option will allow for basic password protection on the installer. Before running the installer the password below must be entered before proceeding with an install. This password is a general deterrent and should not be substituted for properly keeping your files secure. Be sure to remove all installer files when the install process is completed."
1259
- msgstr ""
1260
-
1261
- #: views/packages/main/s1.setup2.php:440
1262
- msgid "Prefills"
1263
- msgstr ""
1264
-
1265
- #: views/packages/main/s1.setup2.php:448
1266
- msgid "Basic"
1267
- msgstr ""
1268
-
1269
- #: views/packages/main/s1.setup2.php:449 views/settings/gopro.php:176
1270
- msgid "cPanel"
1271
- msgstr ""
1272
-
1273
- #: views/packages/main/s1.setup2.php:461
1274
- msgid "example: localhost (value is optional)"
1275
- msgstr ""
1276
-
1277
- #: views/packages/main/s1.setup2.php:464
1278
- msgid "Host Port"
1279
- msgstr ""
1280
-
1281
- #: views/packages/main/s1.setup2.php:465
1282
- msgid "example: 3306 (value is optional)"
1283
- msgstr ""
1284
-
1285
- #: views/packages/main/s1.setup2.php:469
1286
- msgid "example: DatabaseName (value is optional)"
1287
- msgstr ""
1288
-
1289
- #: views/packages/main/s1.setup2.php:473
1290
- msgid "example: DatabaseUserName (value is optional)"
1291
- msgstr ""
1292
-
1293
- #: views/packages/main/s1.setup2.php:483
1294
- msgid "Create the database and database user at install time without leaving the installer!"
1295
- msgstr ""
1296
-
1297
- #: views/packages/main/s1.setup2.php:484
1298
- msgid "This feature is only availble in "
1299
- msgstr ""
1300
-
1301
- #: views/packages/main/s1.setup2.php:485
1302
- msgid "Duplicator Pro!"
1303
- msgstr ""
1304
-
1305
- #: views/packages/main/s1.setup2.php:486
1306
- msgid "This feature works only with hosts that support cPanel."
1307
- msgstr ""
1308
-
1309
- #: views/packages/main/s1.setup2.php:498
1310
- msgid "Reset"
1311
- msgstr ""
1312
-
1313
- #: views/packages/main/s1.setup2.php:499
1314
- msgid "Next"
1315
- msgstr ""
1316
-
1317
- #: views/packages/main/s1.setup2.php:508
1318
- msgid "Reset Package Settings?"
1319
- msgstr ""
1320
-
1321
- #: views/packages/main/s1.setup2.php:509
1322
- msgid "This will clear and reset all of the current package settings. Would you like to continue?"
1323
- msgstr ""
1324
-
1325
- #: views/packages/main/s2.scan1.php:148
1326
- msgid "Input fields not valid"
1327
- msgstr ""
1328
-
1329
- #: views/packages/main/s2.scan1.php:149 views/packages/main/s2.scan1.php:207
1330
- msgid "Please try again!"
1331
- msgstr ""
1332
-
1333
- #: views/packages/main/s2.scan1.php:151 views/packages/main/s2.scan1.php:212
1334
- #: views/packages/main/s3.build.php:353
1335
- msgid "Error Message:"
1336
- msgstr ""
1337
-
1338
- #: views/packages/main/s2.scan1.php:161 views/packages/main/s2.scan1.php:267
1339
- msgid "Back"
1340
- msgstr ""
1341
-
1342
- #: views/packages/main/s2.scan1.php:180
1343
- msgid "Step 2: System Scan"
1344
- msgstr ""
1345
-
1346
- #: views/packages/main/s2.scan1.php:197
1347
- msgid "Scanning Site"
1348
- msgstr ""
1349
-
1350
- #: views/packages/main/s2.scan1.php:199 views/packages/main/s3.build.php:116
1351
- msgid "Please Wait..."
1352
- msgstr ""
1353
-
1354
- #: views/packages/main/s2.scan1.php:200
1355
- msgid "Keep this window open during the scan process."
1356
- msgstr ""
1357
-
1358
- #: views/packages/main/s2.scan1.php:201
1359
- msgid "This can take several minutes."
1360
- msgstr ""
1361
-
1362
- #: views/packages/main/s2.scan1.php:206
1363
- msgid "Scan Error"
1364
- msgstr ""
1365
-
1366
- #: views/packages/main/s2.scan1.php:209 views/packages/main/s3.build.php:349
1367
- msgid "Server Status:"
1368
- msgstr ""
1369
-
1370
- #: views/packages/main/s2.scan1.php:221
1371
- msgid "Scan Complete"
1372
- msgstr ""
1373
-
1374
- #: views/packages/main/s2.scan1.php:223
1375
- msgid "Process Time:"
1376
- msgstr ""
1377
-
1378
- #: views/packages/main/s2.scan1.php:239
1379
- msgid "A notice status has been detected, are you sure you want to continue?"
1380
- msgstr ""
1381
-
1382
- #: views/packages/main/s2.scan1.php:243
1383
- msgid "Yes. Continue with the build process!"
1384
- msgstr ""
1385
-
1386
- #: views/packages/main/s2.scan1.php:249
1387
- msgid "Scan checks are not required to pass, however they could cause issues on some systems."
1388
- msgstr ""
1389
-
1390
- #: views/packages/main/s2.scan1.php:251
1391
- msgid "Please review the details for each section by clicking on the detail title."
1392
- msgstr ""
1393
-
1394
- #: views/packages/main/s2.scan1.php:258
1395
- msgid "Do you want to continue?"
1396
- msgstr ""
1397
-
1398
- #: views/packages/main/s2.scan1.php:260
1399
- msgid "At least one or more checkboxes was checked in \"Quick Filters\"."
1400
- msgstr ""
1401
-
1402
- #: views/packages/main/s2.scan1.php:261
1403
- msgid "To apply a \"Quick Filter\" click the \"Add Filters & Rescan\" button"
1404
- msgstr ""
1405
-
1406
- #: views/packages/main/s2.scan1.php:263
1407
- msgid "Yes. Continue without applying any file filters."
1408
- msgstr ""
1409
-
1410
- #: views/packages/main/s2.scan1.php:268
1411
- msgid "Rescan"
1412
- msgstr ""
1413
-
1414
- #: views/packages/main/s2.scan1.php:414
1415
- msgid "Unable to perform a full scan, please try the following actions:"
1416
- msgstr ""
1417
-
1418
- #: views/packages/main/s2.scan1.php:415
1419
- msgid "1. Go back and create a root path directory filter to validate the site is scan-able."
1420
- msgstr ""
1421
-
1422
- #: views/packages/main/s2.scan1.php:416
1423
- msgid "2. Continue to add/remove filters to isolate which path is causing issues."
1424
- msgstr ""
1425
-
1426
- #: views/packages/main/s2.scan1.php:417
1427
- msgid "3. This message will go away once the correct filters are applied."
1428
- msgstr ""
1429
-
1430
- #: views/packages/main/s2.scan1.php:419
1431
- msgid "Common Issues:"
1432
- msgstr ""
1433
-
1434
- #: views/packages/main/s2.scan1.php:420
1435
- msgid "- On some budget hosts scanning over 30k files can lead to timeout/gateway issues. Consider scanning only your main WordPress site and avoid trying to backup other external directories."
1436
- msgstr ""
1437
-
1438
- #: views/packages/main/s2.scan1.php:421
1439
- msgid "- Symbolic link recursion can cause timeouts. Ask your server admin if any are present in the scan path. If they are add the full path as a filter and try running the scan again."
1440
- msgstr ""
1441
-
1442
- #: views/packages/main/s2.scan1.php:434 views/packages/main/s2.scan3.php:57
1443
- #: views/packages/main/s2.scan3.php:68 views/packages/main/s3.build.php:245
1444
- msgid "Notice"
1445
- msgstr ""
1446
-
1447
- #: views/packages/main/s2.scan1.php:436
1448
- msgid "Good"
1449
- msgstr ""
1450
-
1451
- #: views/packages/main/s2.scan1.php:437
1452
- msgid "Fail"
1453
- msgstr ""
1454
-
1455
- #: views/packages/main/s2.scan2.php:7
1456
- msgid "Server"
1457
- msgstr ""
1458
-
1459
- #: views/packages/main/s2.scan2.php:8
1460
- msgid "Show Diagnostics"
1461
- msgstr ""
1462
-
1463
- #: views/packages/main/s2.scan2.php:63
1464
- #: views/tools/diagnostics/inc.settings.php:51
1465
- msgid "Web Server"
1466
- msgstr ""
1467
-
1468
- #: views/packages/main/s2.scan2.php:64
1469
- msgid "Supported web servers: "
1470
- msgstr ""
1471
-
1472
- #: views/packages/main/s2.scan2.php:69
1473
- msgid "The minimum PHP version supported by Duplicator is 5.2.9. It is highly recommended to use PHP 5.3+ for improved stability. For international language support please use PHP 7.0+."
1474
- msgstr ""
1475
-
1476
- #: views/packages/main/s2.scan2.php:74
1477
- msgid "PHP Open Base Dir"
1478
- msgstr ""
1479
-
1480
- #: views/packages/main/s2.scan2.php:75
1481
- msgid "Issues might occur when [open_basedir] is enabled. Work with your server admin to disable this value in the php.ini file if you’re having issues building a package."
1482
- msgstr ""
1483
-
1484
- #: views/packages/main/s2.scan2.php:80 views/packages/main/s3.build.php:328
1485
- msgid "PHP Max Execution Time"
1486
- msgstr ""
1487
-
1488
- #: views/packages/main/s2.scan2.php:81
1489
- msgid "Timeouts may occur for larger packages when [max_execution_time] time in the php.ini is too low. A value of 0 (recommended) indicates that PHP has no time limits. An attempt is made to override this value if the server allows it."
1490
- msgstr ""
1491
-
1492
- #: views/packages/main/s2.scan2.php:84
1493
- msgid "Note: Timeouts can also be set at the web server layer, so if the PHP max timeout passes and you still see a build timeout messages, then your web server could be killing the process. If you are on a budget host and limited on processing time, consider using the database or file filters to shrink the size of your overall package. However use caution as excluding the wrong resources can cause your install to not work properly."
1494
- msgstr ""
1495
-
1496
- #: views/packages/main/s2.scan2.php:92
1497
- msgid "Get faster builds with Duplicator Pro with access to shell_exec zip."
1498
- msgstr ""
1499
-
1500
- #: views/packages/main/s2.scan2.php:112
1501
- msgid "WordPress Version"
1502
- msgstr ""
1503
-
1504
- #: views/packages/main/s2.scan2.php:113
1505
- #, php-format
1506
- msgid "It is recommended to have a version of WordPress that is greater than %1$s. Older version of WordPress can lead to migration issues and are a security risk. If possible please update your WordPress site to the latest version."
1507
- msgstr ""
1508
-
1509
- #: views/packages/main/s2.scan2.php:117
1510
- msgid "Core Files"
1511
- msgstr ""
1512
-
1513
- #: views/packages/main/s2.scan2.php:123
1514
- msgid "The core WordPress paths below will <u>not</u> be included in the archive. These paths are required for WordPress to function!"
1515
- msgstr ""
1516
-
1517
- #: views/packages/main/s2.scan2.php:134
1518
- msgid "The core WordPress file below will <u>not</u> be included in the archive. This file is required for WordPress to function!"
1519
- msgstr ""
1520
-
1521
- #: views/packages/main/s2.scan2.php:147
1522
- msgid " to the new location for the site to function properly."
1523
- msgstr ""
1524
-
1525
- #: views/packages/main/s2.scan2.php:153
1526
- msgid "If the scanner is unable to locate the wp-config.php file in the root directory, then you will need to manually copy it to its new location. This check will also look for core WordPress paths that should be included in the archive for WordPress to work correctly."
1527
- msgstr ""
1528
-
1529
- #: views/packages/main/s2.scan2.php:172
1530
- msgid "Multisite: Unsupported"
1531
- msgstr ""
1532
-
1533
- #: views/packages/main/s2.scan2.php:173
1534
- msgid "Duplicator does not support WordPress multisite migrations. We recommend using Duplicator Pro which currently supports full multisite migrations and subsite to standalone site migrations."
1535
- msgstr ""
1536
-
1537
- #: views/packages/main/s2.scan2.php:177
1538
- msgid "While it is not recommended you can still continue with the build of this package. Please note that at install time additional manual custom configurations will need to be made to finalize this multisite migration."
1539
- msgstr ""
1540
-
1541
- #: views/packages/main/s2.scan2.php:179 views/packages/main/s2.scan2.php:184
1542
- msgid "upgrade to pro"
1543
- msgstr ""
1544
-
1545
- #: views/packages/main/s2.scan2.php:181
1546
- msgid "Multisite: N/A"
1547
- msgstr ""
1548
-
1549
- #: views/packages/main/s2.scan2.php:182
1550
- msgid "This is not a multisite install so duplication will proceed without issue. Duplicator does not officially support multisite. However, Duplicator Pro supports duplication of a full multisite network and also has the ability to install a multisite subsite as a standalone site."
1551
- msgstr ""
1552
-
1553
- #: views/packages/main/s2.scan3.php:6
1554
- #: views/tools/diagnostics/inc.settings.php:55
1555
- msgid "Root Path"
1556
- msgstr ""
1557
-
1558
- #: views/packages/main/s2.scan3.php:23
1559
- msgid "Show Scan Details"
1560
- msgstr ""
1561
-
1562
- #: views/packages/main/s2.scan3.php:38 views/packages/main/s2.scan3.php:370
1563
- #: views/packages/main/s2.scan3.php:557 views/settings/general.php:158
1564
- #: views/tools/diagnostics/inc.settings.php:167
1565
- msgid "Enabled"
1566
- msgstr ""
1567
-
1568
- #: views/packages/main/s2.scan3.php:44
1569
- msgid "Archive Size"
1570
- msgstr ""
1571
-
1572
- #: views/packages/main/s2.scan3.php:45
1573
- msgid "This size includes only files BEFORE compression is applied. It does not include the size of the database script or any applied filters. Once complete the package size will be smaller than this number."
1574
- msgstr ""
1575
-
1576
- #: views/packages/main/s2.scan3.php:48 views/packages/main/s2.scan3.php:380
1577
- #: views/packages/main/s2.scan3.php:442
1578
- msgid "uncompressed"
1579
- msgstr ""
1580
-
1581
- #: views/packages/main/s2.scan3.php:56
1582
- msgid "Database only"
1583
- msgstr ""
1584
-
1585
- #: views/packages/main/s2.scan3.php:60
1586
- msgid "Only the database and a copy of the installer.php will be included in the archive.zip file."
1587
- msgstr ""
1588
-
1589
- #: views/packages/main/s2.scan3.php:67
1590
- msgid "Skip archive scan enabled"
1591
- msgstr ""
1592
-
1593
- #: views/packages/main/s2.scan3.php:71
1594
- msgid "All file checks are skipped. This could cause problems during extraction if problematic files are included."
1595
- msgstr ""
1596
-
1597
- #: views/packages/main/s2.scan3.php:73
1598
- msgid " Disable the advanced option to re-enable file controls."
1599
- msgstr ""
1600
-
1601
- #: views/packages/main/s2.scan3.php:84
1602
- msgid "Size Checks"
1603
- msgstr ""
1604
-
1605
- #: views/packages/main/s2.scan3.php:89
1606
- msgid "File Count"
1607
- msgstr ""
1608
-
1609
- #: views/packages/main/s2.scan3.php:90
1610
- msgid "Directory Count"
1611
- msgstr ""
1612
-
1613
- #: views/packages/main/s2.scan3.php:92
1614
- msgid "Compressing larger sites on <i>some budget hosts</i> may cause timeouts. "
1615
- msgstr ""
1616
-
1617
- #: views/packages/main/s2.scan3.php:93
1618
- msgid "more details..."
1619
- msgstr ""
1620
-
1621
- #: views/packages/main/s2.scan3.php:97 views/packages/main/s2.scan3.php:387
1622
- #: views/packages/main/s3.build.php:203 views/packages/screen.php:53
1623
- msgid "Overview"
1624
- msgstr ""
1625
-
1626
- #: views/packages/main/s2.scan3.php:99
1627
- #, php-format
1628
- msgid "This notice is triggered at [%s] and can be ignored on most hosts. If during the build process you see a \"Host Build Interrupt\" message then this host has strict processing limits. Below are some options you can take to overcome constraints set up on this host."
1629
- msgstr ""
1630
-
1631
- #: views/packages/main/s2.scan3.php:103
1632
- msgid "Timeout Options"
1633
- msgstr ""
1634
-
1635
- #: views/packages/main/s2.scan3.php:105
1636
- msgid "Apply the \"Quick Filters\" below or click the back button to apply on previous page."
1637
- msgstr ""
1638
-
1639
- #: views/packages/main/s2.scan3.php:106
1640
- msgid "See the FAQ link to adjust this hosts timeout limits: "
1641
- msgstr ""
1642
-
1643
- #: views/packages/main/s2.scan3.php:106
1644
- msgid "What can I try for Timeout Issues?"
1645
- msgstr ""
1646
-
1647
- #: views/packages/main/s2.scan3.php:107
1648
- msgid "Consider trying multi-threaded support in "
1649
- msgstr ""
1650
-
1651
- #: views/packages/main/s2.scan3.php:108
1652
- msgid "Duplicator Pro."
1653
- msgstr ""
1654
-
1655
- #: views/packages/main/s2.scan3.php:112
1656
- #, php-format
1657
- msgid "Files over %1$s are listed below. Larger files such as movies or zipped content can cause timeout issues on some budget hosts. If you are having issues creating a package try excluding the directory paths below or go back to Step 1 and add them."
1658
- msgstr ""
1659
-
1660
- #: views/packages/main/s2.scan3.php:121 views/packages/main/s2.scan3.php:208
1661
- #: views/packages/main/s2.scan3.php:257
1662
- msgid "Quick Filters"
1663
- msgstr ""
1664
-
1665
- #: views/packages/main/s2.scan3.php:122
1666
- msgid "Large Files"
1667
- msgstr ""
1668
-
1669
- #: views/packages/main/s2.scan3.php:125 views/packages/main/s2.scan3.php:260
1670
- msgid "Hide All"
1671
- msgstr ""
1672
-
1673
- #: views/packages/main/s2.scan3.php:126 views/packages/main/s2.scan3.php:261
1674
- msgid "Show All"
1675
- msgstr ""
1676
-
1677
- #: views/packages/main/s2.scan3.php:136 views/packages/main/s2.scan3.php:276
1678
- msgid "Core WordPress directories should not be filtered. Use caution when excluding files."
1679
- msgstr ""
1680
-
1681
- #: views/packages/main/s2.scan3.php:156
1682
- msgid "No large files found during this scan."
1683
- msgstr ""
1684
-
1685
- #: views/packages/main/s2.scan3.php:159
1686
- msgid "No large files found during this scan. If you're having issues building a package click the back button and try adding a file filter to non-essential files paths like wp-content/uploads. These excluded files can then be manually moved to the new location after you have ran the migration installer."
1687
- msgstr ""
1688
-
1689
- #: views/packages/main/s2.scan3.php:172 views/packages/main/s2.scan3.php:302
1690
- msgid "*Checking a directory will exclude all items recursively from that path down. Please use caution when filtering directories."
1691
- msgstr ""
1692
-
1693
- #: views/packages/main/s2.scan3.php:175 views/packages/main/s2.scan3.php:231
1694
- #: views/packages/main/s2.scan3.php:305
1695
- msgid "Add Filters &amp; Rescan"
1696
- msgstr ""
1697
-
1698
- #: views/packages/main/s2.scan3.php:177 views/packages/main/s2.scan3.php:307
1699
- msgid "Copy Paths to Clipboard"
1700
- msgstr ""
1701
-
1702
- #: views/packages/main/s2.scan3.php:193
1703
- msgid "Addon Sites"
1704
- msgstr ""
1705
-
1706
- #: views/packages/main/s2.scan3.php:199
1707
- msgid "An \"Addon Site\" is a separate WordPress site(s) residing in subdirectories within this site. If you confirm these to be separate sites, then it is recommended that you exclude them by checking the corresponding boxes below and clicking the 'Add Filters & Rescan' button. To backup the other sites install the plugin on the sites needing to be backed-up."
1708
- msgstr ""
1709
-
1710
- #: views/packages/main/s2.scan3.php:222
1711
- msgid "No add on sites found."
1712
- msgstr ""
1713
-
1714
- #: views/packages/main/s2.scan3.php:228
1715
- msgid "*Checking a directory will exclude all items in that path recursively."
1716
- msgstr ""
1717
-
1718
- #: views/packages/main/s2.scan3.php:244 views/packages/main/s2.scan3.php:258
1719
- msgid "Name Checks"
1720
- msgstr ""
1721
-
1722
- #: views/packages/main/s2.scan3.php:249
1723
- msgid "Unicode and special characters such as \"*?><:/\\|\", can be problematic on some hosts."
1724
- msgstr ""
1725
-
1726
- #: views/packages/main/s2.scan3.php:250
1727
- msgid " Only consider using this filter if the package build is failing. Select files that are not important to your site or you can migrate manually."
1728
- msgstr ""
1729
-
1730
- #: views/packages/main/s2.scan3.php:251
1731
- msgid "If this environment/system and the system where it will be installed are set up to support Unicode and long paths then these filters can be ignored. If you run into issues with creating or installing a package, then is recommended to filter these paths."
1732
- msgstr ""
1733
-
1734
- #: views/packages/main/s2.scan3.php:296
1735
- msgid "No file/directory name warnings found."
1736
- msgstr ""
1737
-
1738
- #: views/packages/main/s2.scan3.php:319
1739
- msgid "Read Checks"
1740
- msgstr ""
1741
-
1742
- #: views/packages/main/s2.scan3.php:324
1743
- msgid "PHP is unable to read the following items and they will NOT be included in the package. Please work with your host to adjust the permissions or resolve the symbolic-link(s) shown in the lists below. If these items are not needed then this notice can be ignored."
1744
- msgstr ""
1745
-
1746
- #: views/packages/main/s2.scan3.php:330
1747
- msgid "Unreadable Items:"
1748
- msgstr ""
1749
-
1750
- #: views/packages/main/s2.scan3.php:337
1751
- msgid "No unreadable items found."
1752
- msgstr ""
1753
-
1754
- #: views/packages/main/s2.scan3.php:341
1755
- msgid "Recursive Links:"
1756
- msgstr ""
1757
-
1758
- #: views/packages/main/s2.scan3.php:348
1759
- msgid "No recursive sym-links found."
1760
- msgstr ""
1761
-
1762
- #: views/packages/main/s2.scan3.php:376
1763
- msgid "Database Size:"
1764
- msgstr ""
1765
-
1766
- #: views/packages/main/s2.scan3.php:377
1767
- msgid "The database size represents only the included tables. The process for gathering the size uses the query SHOW TABLE STATUS. The overall size of the database file can impact the final size of the package."
1768
- msgstr ""
1769
-
1770
- #: views/packages/main/s2.scan3.php:391
1771
- msgid "TOTAL SIZE"
1772
- msgstr ""
1773
-
1774
- #: views/packages/main/s2.scan3.php:394
1775
- msgid "Records"
1776
- msgstr ""
1777
-
1778
- #: views/packages/main/s2.scan3.php:397
1779
- #, php-format
1780
- msgid "Total size and row counts are approximate values. The thresholds that trigger notices are %1$s records total for the entire database. Larger databases take more time to process. On some budget hosts that have cpu/memory/timeout limits this may cause issues."
1781
- msgstr ""
1782
-
1783
- #: views/packages/main/s2.scan3.php:402
1784
- msgid "TABLE DETAILS:"
1785
- msgstr ""
1786
-
1787
- #: views/packages/main/s2.scan3.php:404
1788
- #, php-format
1789
- msgid "The notices for tables are %1$s records or names with upper-case characters. Individual tables will not trigger a notice message, but can help narrow down issues if they occur later on."
1790
- msgstr ""
1791
-
1792
- #: views/packages/main/s2.scan3.php:411 views/packages/main/s2.scan3.php:463
1793
- msgid "RECOMMENDATIONS:"
1794
- msgstr ""
1795
-
1796
- #: views/packages/main/s2.scan3.php:414
1797
- msgid "repair and optimization"
1798
- msgstr ""
1799
-
1800
- #: views/packages/main/s2.scan3.php:415
1801
- #, php-format
1802
- msgid "1. Run a %1$s on the table to improve the overall size and performance."
1803
- msgstr ""
1804
-
1805
- #: views/packages/main/s2.scan3.php:417
1806
- msgid "2. Remove post revisions and stale data from tables. Tables such as logs, statistical or other non-critical data should be cleared."
1807
- msgstr ""
1808
-
1809
- #: views/packages/main/s2.scan3.php:419
1810
- msgid "Enable mysqldump"
1811
- msgstr ""
1812
-
1813
- #: views/packages/main/s2.scan3.php:420
1814
- #, php-format
1815
- msgid "3. %1$s if this host supports the option."
1816
- msgstr ""
1817
-
1818
- #: views/packages/main/s2.scan3.php:422
1819
- msgid "lower_case_table_names"
1820
- msgstr ""
1821
-
1822
- #: views/packages/main/s2.scan3.php:423
1823
- #, php-format
1824
- msgid "4. For table name case sensitivity issues either rename the table with lower case characters or be prepared to work with the %1$s system variable setting."
1825
- msgstr ""
1826
-
1827
- #: views/packages/main/s2.scan3.php:434
1828
- msgid "Total Size"
1829
- msgstr ""
1830
-
1831
- #: views/packages/main/s2.scan3.php:439
1832
- msgid "Total Size:"
1833
- msgstr ""
1834
-
1835
- #: views/packages/main/s2.scan3.php:440
1836
- msgid "The total size of the site (files plus database)."
1837
- msgstr ""
1838
-
1839
- #: views/packages/main/s2.scan3.php:450
1840
- #, php-format
1841
- msgid "The build can't continue because the total size of files and the database exceeds the %s limit that can be processed when creating a DupArchive package. "
1842
- msgstr ""
1843
-
1844
- #: views/packages/main/s2.scan3.php:451
1845
- msgid "<a href=\"javascript:void(0)\" onclick=\"jQuery('#data-ll-status-recommendations').toggle()\">Click for recommendations.</a>"
1846
- msgstr ""
1847
-
1848
- #: views/packages/main/s2.scan3.php:457 views/packages/main/s2.scan3.php:531
1849
- #: views/settings/packages.php:208
1850
- msgid "Archive Engine"
1851
- msgstr ""
1852
-
1853
- #: views/packages/main/s2.scan3.php:459
1854
- #, php-format
1855
- msgid " With DupArchive, Duplicator is restricted to processing sites up to %s. To process larger sites, consider these recommendations. "
1856
- msgstr ""
1857
-
1858
- #: views/packages/main/s2.scan3.php:468
1859
- msgid "Step 1"
1860
- msgstr ""
1861
-
1862
- #: views/packages/main/s2.scan3.php:469
1863
- #, php-format
1864
- msgid "- Add data filters to get the package size under %s: "
1865
- msgstr ""
1866
-
1867
- #: views/packages/main/s2.scan3.php:471
1868
- msgid "- In the 'Size Checks' section above consider adding filters (if notice is shown)."
1869
- msgstr ""
1870
-
1871
- #: views/packages/main/s2.scan3.php:473
1872
- #, php-format
1873
- msgid "- In %s consider adding file/directory or database table filters."
1874
- msgstr ""
1875
-
1876
- #: views/packages/main/s2.scan3.php:477
1877
- msgid "covered here."
1878
- msgstr ""
1879
-
1880
- #: views/packages/main/s2.scan3.php:478
1881
- #, php-format
1882
- msgid "- Perform a two part install %s"
1883
- msgstr ""
1884
-
1885
- #: views/packages/main/s2.scan3.php:481
1886
- msgid "ZipArchive Engine"
1887
- msgstr ""
1888
-
1889
- #: views/packages/main/s2.scan3.php:482
1890
- #, php-format
1891
- msgid "- Switch to the %s which requires a capable hosting provider (VPS recommended)."
1892
- msgstr ""
1893
-
1894
- #: views/packages/main/s2.scan3.php:486
1895
- #, php-format
1896
- msgid "- Consider upgrading to %s for large site support. (unlimited)"
1897
- msgstr ""
1898
-
1899
- #: views/packages/main/s2.scan3.php:496
1900
- msgid "Migrate large, multi-gig sites with"
1901
- msgstr ""
1902
-
1903
- #: views/packages/main/s2.scan3.php:511
1904
- msgid "Scan Details"
1905
- msgstr ""
1906
-
1907
- #: views/packages/main/s2.scan3.php:518
1908
- msgid "Copy Quick Filter Paths"
1909
- msgstr ""
1910
-
1911
- #: views/packages/main/s2.scan3.php:537
1912
- msgid "Name:"
1913
- msgstr ""
1914
-
1915
- #: views/packages/main/s2.scan3.php:538
1916
- msgid "Host:"
1917
- msgstr ""
1918
-
1919
- #: views/packages/main/s2.scan3.php:540
1920
- msgid "Build Mode:"
1921
- msgstr ""
1922
-
1923
- #: views/packages/main/s2.scan3.php:556 views/settings/gopro.php:55
1924
- msgid "File Filters"
1925
- msgstr ""
1926
-
1927
- #: views/packages/main/s2.scan3.php:557
1928
- #: views/tools/diagnostics/inc.settings.php:167
1929
- msgid "Disabled"
1930
- msgstr ""
1931
-
1932
- #: views/packages/main/s2.scan3.php:571
1933
- msgid "No custom directory filters set."
1934
- msgstr ""
1935
-
1936
- #: views/packages/main/s2.scan3.php:581
1937
- msgid "No file extension filters have been set."
1938
- msgstr ""
1939
-
1940
- #: views/packages/main/s2.scan3.php:593
1941
- msgid "No custom file filters set."
1942
- msgstr ""
1943
-
1944
- #: views/packages/main/s2.scan3.php:597
1945
- msgid "Auto Directory Filters"
1946
- msgstr ""
1947
-
1948
- #: views/packages/main/s2.scan3.php:603
1949
- msgid "Auto File Filters"
1950
- msgstr ""
1951
-
1952
- #: views/packages/main/s2.scan3.php:616
1953
- msgid "Path filters will be skipped during the archive process when enabled."
1954
- msgstr ""
1955
-
1956
- #: views/packages/main/s2.scan3.php:618
1957
- msgid "[view json result report]"
1958
- msgstr ""
1959
-
1960
- #: views/packages/main/s2.scan3.php:621
1961
- msgid "Auto filters are applied to prevent archiving other backup sets."
1962
- msgstr ""
1963
-
1964
- #: views/packages/main/s2.scan3.php:632 views/packages/main/s2.scan3.php:641
1965
- msgid "Click to Copy"
1966
- msgstr ""
1967
-
1968
- #: views/packages/main/s2.scan3.php:646
1969
- msgid "Copy the paths above and apply them as needed on Step 1 &gt; Archive &gt; Files section."
1970
- msgstr ""
1971
-
1972
- #: views/packages/main/s2.scan3.php:663
1973
- msgid "Directory applied filter set."
1974
- msgstr ""
1975
-
1976
- #: views/packages/main/s2.scan3.php:690
1977
- msgid "No directories have been selected!"
1978
- msgstr ""
1979
-
1980
- #: views/packages/main/s2.scan3.php:694
1981
- msgid "No files have been selected!"
1982
- msgstr ""
1983
-
1984
- #: views/packages/main/s2.scan3.php:732
1985
- msgid "Copied to Clipboard!"
1986
- msgstr ""
1987
-
1988
- #: views/packages/main/s2.scan3.php:734
1989
- msgid "Manual copy of selected text required on this browser."
1990
- msgstr ""
1991
-
1992
- #: views/packages/main/s2.scan3.php:741
1993
- msgid "Initializing Please Wait..."
1994
- msgstr ""
1995
-
1996
- #: views/packages/main/s2.scan3.php:784 views/packages/main/s2.scan3.php:791
1997
- msgid "Error applying filters. Please go back to Step 1 to add filter manually!"
1998
- msgstr ""
1999
-
2000
- #: views/packages/main/s2.scan3.php:867
2001
- msgid "Unable to report on any tables"
2002
- msgstr ""
2003
-
2004
- #: views/packages/main/s2.scan3.php:893
2005
- msgid "Unable to report on database stats"
2006
- msgstr ""
2007
-
2008
- #: views/packages/main/s3.build.php:16
2009
- msgid "Help review the plugin"
2010
- msgstr ""
2011
-
2012
- #: views/packages/main/s3.build.php:19
2013
- msgid "Want more power? Try"
2014
- msgstr ""
2015
-
2016
- #: views/packages/main/s3.build.php:84
2017
- msgid "Step 3: Build Package"
2018
- msgstr ""
2019
-
2020
- #: views/packages/main/s3.build.php:114
2021
- msgid "Building Package"
2022
- msgstr ""
2023
-
2024
- #: views/packages/main/s3.build.php:117
2025
- msgid "Keep this window open and do not close during the build process."
2026
- msgstr ""
2027
-
2028
- #: views/packages/main/s3.build.php:118
2029
- msgid "This may take several minutes to complete."
2030
- msgstr ""
2031
-
2032
- #: views/packages/main/s3.build.php:122
2033
- msgid "Build Status"
2034
- msgstr ""
2035
-
2036
- #: views/packages/main/s3.build.php:129
2037
- msgid "Package Completed"
2038
- msgstr ""
2039
-
2040
- #: views/packages/main/s3.build.php:134
2041
- msgid "Process Time"
2042
- msgstr ""
2043
-
2044
- #: views/packages/main/s3.build.php:140
2045
- msgid "Download Files"
2046
- msgstr ""
2047
-
2048
- #: views/packages/main/s3.build.php:142
2049
- msgid "Click to download installer file"
2050
- msgstr ""
2051
-
2052
- #: views/packages/main/s3.build.php:145
2053
- msgid "Click to download archive file"
2054
- msgstr ""
2055
-
2056
- #: views/packages/main/s3.build.php:151
2057
- msgid "Click to download both files"
2058
- msgstr ""
2059
-
2060
- #: views/packages/main/s3.build.php:152
2061
- msgid "One-Click Download"
2062
- msgstr ""
2063
-
2064
- #: views/packages/main/s3.build.php:155
2065
- msgid "One Click:"
2066
- msgstr ""
2067
-
2068
- #: views/packages/main/s3.build.php:156
2069
- msgid "Clicking this link will open both the installer and archive download prompts at the same time. On some browsers you may have to disable pop-up warnings on this domain for this to work correctly."
2070
- msgstr ""
2071
-
2072
- #: views/packages/main/s3.build.php:164
2073
- msgid "How do I install this Package?"
2074
- msgstr ""
2075
-
2076
- #: views/packages/main/s3.build.php:176
2077
- msgid "Host Build Interrupt"
2078
- msgstr ""
2079
-
2080
- #: views/packages/main/s3.build.php:177
2081
- msgid "This server cannot complete the build due to host setup constraints."
2082
- msgstr ""
2083
-
2084
- #: views/packages/main/s3.build.php:178
2085
- msgid "To get past this hosts limitation consider the options below by clicking each section."
2086
- msgstr ""
2087
-
2088
- #: views/packages/main/s3.build.php:184
2089
- msgid "Option 1: Try DupArchive"
2090
- msgstr ""
2091
-
2092
- #: views/packages/main/s3.build.php:188
2093
- msgid "OPTION 1:"
2094
- msgstr ""
2095
-
2096
- #: views/packages/main/s3.build.php:190
2097
- msgid "Enable the DupArchive format which is specific to Duplicator and designed to perform better on constrained budget hosts."
2098
- msgstr ""
2099
-
2100
- #: views/packages/main/s3.build.php:194
2101
- msgid "Note: DupArchive on Duplicator only supports sites up to 500MB. If your site is over 500MB then use a file filter on step 1 to get the size below 500MB or try the other options mentioned below. Alternatively, you may want to consider"
2102
- msgstr ""
2103
-
2104
- #: views/packages/main/s3.build.php:200
2105
- msgid " which is capable of migrating sites much larger than 500MB."
2106
- msgstr ""
2107
-
2108
- #: views/packages/main/s3.build.php:204 views/packages/main/s3.build.php:271
2109
- msgid "Please follow these steps:"
2110
- msgstr ""
2111
-
2112
- #: views/packages/main/s3.build.php:206
2113
- msgid "On the scanner step check to make sure your package is under 500MB. If not see additional options below."
2114
- msgstr ""
2115
-
2116
- #: views/packages/main/s3.build.php:208
2117
- msgid "Go to Duplicator &gt; Settings &gt; Packages Tab &gt; Archive Engine &gt;"
2118
- msgstr ""
2119
-
2120
- #: views/packages/main/s3.build.php:209
2121
- msgid "Enable DupArchive"
2122
- msgstr ""
2123
-
2124
- #: views/packages/main/s3.build.php:211
2125
- msgid "Build a new package using the new engine format."
2126
- msgstr ""
2127
-
2128
- #: views/packages/main/s3.build.php:215
2129
- msgid "Note: The DupArchive engine will generate an archive.daf file. This file is very similar to a .zip except that it can only be extracted by the installer.php file or the"
2130
- msgstr ""
2131
-
2132
- #: views/packages/main/s3.build.php:217
2133
- msgid "commandline extraction tool"
2134
- msgstr ""
2135
-
2136
- #: views/packages/main/s3.build.php:225
2137
- msgid "Option 2: File Filters"
2138
- msgstr ""
2139
-
2140
- #: views/packages/main/s3.build.php:229
2141
- msgid "OPTION 2:"
2142
- msgstr ""
2143
-
2144
- #: views/packages/main/s3.build.php:231
2145
- msgid "The first pass for reading files on some budget hosts maybe slow and have conflicts with strict timeout settings setup by the hosting provider. In these cases, it is recommended to retry the build by adding file filters to larger files/directories."
2146
- msgstr ""
2147
-
2148
- #: views/packages/main/s3.build.php:236
2149
- msgid "For example, you could filter out the \"/wp-content/uploads/\" folder to create the package then move the files from that directory over manually. If this work-flow is not desired or does not work please check-out the other options below."
2150
- msgstr ""
2151
-
2152
- #: views/packages/main/s3.build.php:241
2153
- msgid "Retry Build With Filters"
2154
- msgstr ""
2155
-
2156
- #: views/packages/main/s3.build.php:247
2157
- msgid "Build Folder:"
2158
- msgstr ""
2159
-
2160
- #: views/packages/main/s3.build.php:248
2161
- msgid "On some servers the build will continue to run in the background. To validate if a build is still running; open the 'tmp' folder above and see if the archive file is growing in size or check the main packages screen to see if the package completed. If it is not then your server has strict timeout constraints."
2162
- msgstr ""
2163
-
2164
- #: views/packages/main/s3.build.php:260
2165
- msgid "Option 3: Two-Part Install"
2166
- msgstr ""
2167
-
2168
- #: views/packages/main/s3.build.php:264
2169
- msgid "OPTION 3:"
2170
- msgstr ""
2171
-
2172
- #: views/packages/main/s3.build.php:266
2173
- msgid "A two-part install minimizes server load and can avoid I/O and CPU issues encountered on some budget hosts. With this procedure you simply build a 'database-only' archive, manually move the website files, and then run the installer to complete the process."
2174
- msgstr ""
2175
-
2176
- #: views/packages/main/s3.build.php:270
2177
- msgid " Overview"
2178
- msgstr ""
2179
-
2180
- #: views/packages/main/s3.build.php:273
2181
- msgid "Click the button below to go back to Step 1."
2182
- msgstr ""
2183
-
2184
- #: views/packages/main/s3.build.php:274
2185
- msgid "On Step 1 the \"Archive Only the Database\" checkbox will be auto checked."
2186
- msgstr ""
2187
-
2188
- #: views/packages/main/s3.build.php:276
2189
- msgid "Complete the package build and follow the "
2190
- msgstr ""
2191
-
2192
- #: views/packages/main/s3.build.php:286
2193
- msgid "Yes. I have read the above overview and would like to continue!"
2194
- msgstr ""
2195
-
2196
- #: views/packages/main/s3.build.php:288
2197
- msgid "Start Two-Part Install Process"
2198
- msgstr ""
2199
-
2200
- #: views/packages/main/s3.build.php:297
2201
- msgid "Option 4: Configure Server"
2202
- msgstr ""
2203
-
2204
- #: views/packages/main/s3.build.php:301
2205
- msgid "OPTION 4:"
2206
- msgstr ""
2207
-
2208
- #: views/packages/main/s3.build.php:302
2209
- msgid "This option is available on some hosts that allow for users to adjust server configurations. With this option you will be directed to an FAQ page that will show various recommendations you can take to improve/unlock constraints set up on this server."
2210
- msgstr ""
2211
-
2212
- #: views/packages/main/s3.build.php:308
2213
- msgid "Diagnose Server Setup"
2214
- msgstr ""
2215
-
2216
- #: views/packages/main/s3.build.php:312
2217
- msgid "RUNTIME DETAILS"
2218
- msgstr ""
2219
-
2220
- #: views/packages/main/s3.build.php:315
2221
- msgid "Allowed Runtime:"
2222
- msgstr ""
2223
-
2224
- #: views/packages/main/s3.build.php:319
2225
- msgid "PHP Max Execution"
2226
- msgstr ""
2227
-
2228
- #: views/packages/main/s3.build.php:329
2229
- msgid "This value is represented in seconds. A value of 0 means no timeout limit is set for PHP."
2230
- msgstr ""
2231
-
2232
- #: views/packages/main/s3.build.php:333 views/settings/packages.php:167
2233
- msgid "Mode"
2234
- msgstr ""
2235
-
2236
- #: views/packages/main/s3.build.php:339
2237
- msgid "PHP Max Execution Mode"
2238
- msgstr ""
2239
-
2240
- #: views/packages/main/s3.build.php:341
2241
- msgid "If the value is [dynamic] then its possible for PHP to run longer than the default. If the value is [fixed] then PHP will not be allowed to run longer than the default. <br/><br/> If this value is larger than the [Allowed Runtime] above then the web server has been enabled with a timeout cap and is overriding the PHP max time setting."
2242
- msgstr ""
2243
-
2244
- #: views/packages/main/s3.build.php:362
2245
- msgid "Read Package Log File"
2246
- msgstr ""
2247
-
2248
- #: views/packages/screen.php:64
2249
- msgid "<b><i class='fa fa-archive'></i> Packages » All</b><br/> The 'Packages' section is the main interface for managing all the packages that have been created. A Package consists of two core files, the 'archive.zip' and the 'installer.php' file. The archive file is a zip file containing all your WordPress files and a copy of your WordPress database. The installer file is a php file that when browsed to via a web browser presents a wizard that redeploys/installs the website by extracting the archive file and installing the database. To create a package, click the 'Create New' button and follow the prompts. <br/><br/><b><i class='fa fa-download'></i> Downloads</b><br/>To download the package files click on the Installer and Archive buttons after creating a package. The archive file will have a copy of the installer inside of it named installer-backup.php in case the original installer file is lost. To see the details of a package click on the <i class='fa fa-archive'></i> details button.<br/><br/><b><i class='far fa-file-archive'></i> Archive Types</b><br/>An archive file can be saved as either a .zip file or .daf file. A zip file is a common archive format used to compress and group files. The daf file short for 'Duplicator Archive Format' is a custom format used specifically for working with larger packages and scale-ability issues on many shared hosting platforms. Both formats work very similar. The main difference is that the daf file can only be extracted using the installer.php file or the <a href='https://snapcreek.com/duplicator/docs/faqs-tech/#faq-trouble-052-q' target='_blank'>DAF extraction tool</a>. The zip file can be used by the installer.php or other zip tools like winrar/7zip/winzip or other client-side tools. <br/><br/>"
2250
- msgstr ""
2251
-
2252
- #: views/packages/screen.php:85
2253
- msgid "<b>Packages New » 1 Setup</b> <br/>The setup step allows for optional filtered directory paths, files, file extensions and database tables. To filter specific system files, click the 'Enable File Filters' checkbox and add the full path of the file or directory, followed by a semicolon. For a file extension add the name (i.e. 'zip') followed by a semicolon. <br/><br/>To exclude a database table, check the box labeled 'Enable Table Filters' and check the table name to exclude. To include only a copy of your database in the archive file check the box labeled 'Archive Only the Database'. The installer.php file can optionally be pre-filled with data at install time but is not required. <br/><br/>"
2254
- msgstr ""
2255
-
2256
- #: views/packages/screen.php:97
2257
- msgid "<b>Packages » 2 Scan</b> <br/>The plugin will scan your system files and database to let you know if there are any concerns or issues that may be present. All items in green mean the checks looked good. All items in red indicate a warning. Warnings will not prevent the build from running, however if you do run into issues with the build then investigating the warnings should be considered. Click on each section for more details about each scan check. <br/><br/>"
2258
- msgstr ""
2259
-
2260
- #: views/packages/screen.php:105
2261
- msgid ""
2262
- "<b>Packages » 3 Build</b> <br/>The final step in the build process where the installer script and archive of the website can be downloaded. To start the install process follow these steps: <ol><li>Download the installer.php and archive.zip files to your local computer.</li><li>For localhost installs be sure you have PHP, Apache & MySQL installed on your local computer with software such as XAMPP, Instant WordPress or MAMP for MAC. Place the package.zip and installer.php into any empty directory under your webroot then browse to the installer.php via your web browser to launch the install wizard.</li><li>For remote installs use FTP or cPanel to upload both the archive.zip and installer.php to your hosting provider. Place the files in a new empty directory under your host's webroot accessible from a valid URL such as http://your-domain/your-wp-directory/installer.php to launch the install wizard. On some hosts the root directory will be a something like public_html -or- www. If your're not sure contact your hosting provider. </li></ol>For complete instructions see:<br/>\n"
2263
- "\t\t\t\t\t<a href='https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&amp;utm_medium=wordpress_plugin&amp;utm_content=package_built_install_help&amp;utm_campaign=duplicator_free#quick-040-q' target='_blank'>\n"
2264
- "\t\t\t\t\tHow do I install this Package?</a><br/><br/>"
2265
- msgstr ""
2266
-
2267
- #: views/packages/screen.php:122
2268
- msgid "<b>Packages » Details</b> <br/>The details view will give you a full break-down of the package including any errors that may have occured during the install. <br/><br/>"
2269
- msgstr ""
2270
-
2271
- #: views/settings/about-info.php:49
2272
- msgid "Duplicator can streamline your workflow and quickly clone/migrate a WordPress site. The plugin helps admins, designers and developers speed up the migration process of moving a WordPress site. Please help us continue development by giving the plugin a 5 star."
2273
- msgstr ""
2274
-
2275
- #: views/settings/about-info.php:58
2276
- msgid "Rate Duplicator"
2277
- msgstr ""
2278
-
2279
- #: views/settings/about-info.php:69
2280
- msgid "Support Duplicator"
2281
- msgstr ""
2282
-
2283
- #: views/settings/about-info.php:71
2284
- msgid "with a 5 star review!"
2285
- msgstr ""
2286
-
2287
- #: views/settings/about-info.php:85
2288
- msgid "Spread the Word"
2289
- msgstr ""
2290
-
2291
- #: views/settings/about-info.php:92
2292
- msgid "Facebook"
2293
- msgstr ""
2294
-
2295
- #: views/settings/about-info.php:95
2296
- msgid "Twitter"
2297
- msgstr ""
2298
-
2299
- #: views/settings/about-info.php:98
2300
- msgid "LinkedIn"
2301
- msgstr ""
2302
-
2303
- #: views/settings/about-info.php:101
2304
- msgid "Google+"
2305
- msgstr ""
2306
-
2307
- #: views/settings/about-info.php:120
2308
- msgid "Stay in the Loop"
2309
- msgstr ""
2310
-
2311
- #: views/settings/about-info.php:130
2312
- msgid "Subscribe to the Duplicator newsletter and stay on top of great ideas, tutorials, and better ways to improve your workflows"
2313
- msgstr ""
2314
-
2315
- #: views/settings/controller.php:24
2316
- msgid "Schedules"
2317
- msgstr ""
2318
-
2319
- #: views/settings/controller.php:26
2320
- msgid "License"
2321
- msgstr ""
2322
-
2323
- #: views/settings/controller.php:27
2324
- msgid "About"
2325
- msgstr ""
2326
-
2327
- #: views/settings/general.php:8
2328
- msgid "General Settings Saved"
2329
- msgstr ""
2330
-
2331
- #: views/settings/general.php:88
2332
- msgid "Plugin"
2333
- msgstr ""
2334
-
2335
- #: views/settings/general.php:92 views/tools/diagnostics/inc.settings.php:91
2336
- #: views/tools/diagnostics/inc.settings.php:110
2337
- #: views/tools/diagnostics/inc.settings.php:183
2338
- msgid "Version"
2339
- msgstr ""
2340
-
2341
- #: views/settings/general.php:99
2342
- msgid "Uninstall"
2343
- msgstr ""
2344
-
2345
- #: views/settings/general.php:102
2346
- msgid "Delete Plugin Settings"
2347
- msgstr ""
2348
-
2349
- #: views/settings/general.php:105
2350
- msgid "Delete Entire Storage Directory"
2351
- msgstr ""
2352
-
2353
- #: views/settings/general.php:112
2354
- msgid "Full Path"
2355
- msgstr ""
2356
-
2357
- #: views/settings/general.php:115
2358
- msgid "Disable .htaccess File In Storage Directory"
2359
- msgstr ""
2360
-
2361
- #: views/settings/general.php:117
2362
- msgid "Disable if issues occur when downloading installer/archive files."
2363
- msgstr ""
2364
-
2365
- #: views/settings/general.php:122
2366
- msgid "Custom Roles"
2367
- msgstr ""
2368
-
2369
- #: views/settings/general.php:125
2370
- msgid "Enable User Role Editor Plugin Integration"
2371
- msgstr ""
2372
-
2373
- #: views/settings/general.php:130
2374
- msgid "The User Role Editor Plugin"
2375
- msgstr ""
2376
-
2377
- #: views/settings/general.php:131 views/settings/gopro.php:46
2378
- msgid "Free"
2379
- msgstr ""
2380
-
2381
- #: views/settings/general.php:132
2382
- msgid "or"
2383
- msgstr ""
2384
-
2385
- #: views/settings/general.php:133 views/settings/gopro.php:47
2386
- msgid "Professional"
2387
- msgstr ""
2388
-
2389
- #: views/settings/general.php:134
2390
- msgid "must be installed to use"
2391
- msgstr ""
2392
-
2393
- #: views/settings/general.php:135
2394
- msgid "this feature."
2395
- msgstr ""
2396
-
2397
- #: views/settings/general.php:144
2398
- msgid "Debug"
2399
- msgstr ""
2400
-
2401
- #: views/settings/general.php:148
2402
- msgid "Debugging"
2403
- msgstr ""
2404
-
2405
- #: views/settings/general.php:151
2406
- msgid "Enable debug options throughout user interface"
2407
- msgstr ""
2408
-
2409
- #: views/settings/general.php:155
2410
- msgid "Trace Log"
2411
- msgstr ""
2412
-
2413
- #: views/settings/general.php:161
2414
- msgid "Turns on detailed operation logging. Logging will occur in both PHP error and local trace logs."
2415
- msgstr ""
2416
-
2417
- #: views/settings/general.php:163
2418
- msgid "WARNING: Only turn on this setting when asked to by support as tracing will impact performance."
2419
- msgstr ""
2420
-
2421
- #: views/settings/general.php:167
2422
- msgid "Download Trace Log"
2423
- msgstr ""
2424
-
2425
- #: views/settings/general.php:175
2426
- msgid "Advanced"
2427
- msgstr ""
2428
-
2429
- #: views/settings/general.php:182
2430
- msgid "Reset Packages"
2431
- msgstr ""
2432
-
2433
- #: views/settings/general.php:185
2434
- msgid "This process will reset all packages by deleting those without a completed status, reset the active package id and perform a cleanup of the build tmp file."
2435
- msgstr ""
2436
-
2437
- #: views/settings/general.php:188
2438
- msgid "Reset Settings"
2439
- msgstr ""
2440
-
2441
- #: views/settings/general.php:189
2442
- msgid "This action should only be used if the packages screen is having issues or a build is stuck."
2443
- msgstr ""
2444
-
2445
- #: views/settings/general.php:194
2446
- msgid "Archive scan"
2447
- msgstr ""
2448
-
2449
- #: views/settings/general.php:197
2450
- msgid "Skip"
2451
- msgstr ""
2452
-
2453
- #: views/settings/general.php:199
2454
- msgid "If enabled all files check on scan will be skipped before package creation. In some cases, this option can be beneficial if the scan process is having issues running or returning errors."
2455
- msgstr ""
2456
-
2457
- #: views/settings/general.php:205
2458
- msgid "Other Plugins/Themes JS"
2459
- msgstr ""
2460
-
2461
- #: views/settings/general.php:208 views/settings/general.php:224
2462
- msgid "Unhook them on Duplicator pages"
2463
- msgstr ""
2464
-
2465
- #: views/settings/general.php:211
2466
- msgid "Check this option if other plugins/themes JavaScript files are conflicting with Duplicator."
2467
- msgstr ""
2468
-
2469
- #: views/settings/general.php:215 views/settings/general.php:231
2470
- msgid "Do not modify this setting unless you know the expected result or have talked to support."
2471
- msgstr ""
2472
-
2473
- #: views/settings/general.php:221
2474
- msgid "Other Plugins/Themes CSS"
2475
- msgstr ""
2476
-
2477
- #: views/settings/general.php:227
2478
- msgid "Check this option if other plugins/themes CSS files are conflicting with Duplicator."
2479
- msgstr ""
2480
-
2481
- #: views/settings/general.php:240
2482
- msgid "Save General Settings"
2483
- msgstr ""
2484
-
2485
- #: views/settings/general.php:249
2486
- msgid "Reset Packages ?"
2487
- msgstr ""
2488
-
2489
- #: views/settings/general.php:250
2490
- msgid "This will clear and reset all of the current temporary packages. Would you like to continue?"
2491
- msgstr ""
2492
-
2493
- #: views/settings/general.php:251
2494
- msgid "Resetting settings, Please Wait..."
2495
- msgstr ""
2496
-
2497
- #: views/settings/general.php:254
2498
- msgid "Yes"
2499
- msgstr ""
2500
-
2501
- #: views/settings/general.php:255
2502
- msgid "No"
2503
- msgstr ""
2504
-
2505
- #: views/settings/general.php:259
2506
- msgid "AJAX ERROR!"
2507
- msgstr ""
2508
-
2509
- #: views/settings/general.php:259
2510
- msgid "Ajax request error"
2511
- msgstr ""
2512
-
2513
- #: views/settings/general.php:264 views/settings/general.php:317
2514
- msgid "RESPONSE ERROR!"
2515
- msgstr ""
2516
-
2517
- #: views/settings/general.php:307
2518
- msgid "Packages successfully reset"
2519
- msgstr ""
2520
-
2521
- #: views/settings/gopro.php:39
2522
- msgid "The simplicity of Duplicator"
2523
- msgstr ""
2524
-
2525
- #: views/settings/gopro.php:40
2526
- msgid "with power for everyone."
2527
- msgstr ""
2528
-
2529
- #: views/settings/gopro.php:45
2530
- msgid "Feature"
2531
- msgstr ""
2532
-
2533
- #: views/settings/gopro.php:50
2534
- msgid "Backup Files & Database"
2535
- msgstr ""
2536
-
2537
- #: views/settings/gopro.php:60
2538
- msgid "Database Table Filters"
2539
- msgstr ""
2540
-
2541
- #: views/settings/gopro.php:65
2542
- msgid "Migration Wizard"
2543
- msgstr ""
2544
-
2545
- #: views/settings/gopro.php:70
2546
- msgid "Scheduled Backups"
2547
- msgstr ""
2548
-
2549
- #: views/settings/gopro.php:77
2550
- msgid "Amazon S3 Storage"
2551
- msgstr ""
2552
-
2553
- #: views/settings/gopro.php:85
2554
- msgid "Dropbox Storage "
2555
- msgstr ""
2556
-
2557
- #: views/settings/gopro.php:93
2558
- msgid "Google Drive Storage"
2559
- msgstr ""
2560
-
2561
- #: views/settings/gopro.php:101
2562
- msgid "Microsoft One Drive Storage"
2563
- msgstr ""
2564
-
2565
- #: views/settings/gopro.php:109
2566
- msgid "Remote FTP/SFTP Storage"
2567
- msgstr ""
2568
-
2569
- #: views/settings/gopro.php:115
2570
- msgid "Overwrite Live Site"
2571
- msgstr ""
2572
-
2573
- #: views/settings/gopro.php:117
2574
- msgid "Overwrite Existing Site"
2575
- msgstr ""
2576
-
2577
- #: views/settings/gopro.php:118
2578
- msgid "Overwrite a live site. Makes installing super-fast!"
2579
- msgstr ""
2580
-
2581
- #: views/settings/gopro.php:124 views/settings/gopro.php:126
2582
- msgid "Large Site Support"
2583
- msgstr ""
2584
-
2585
- #: views/settings/gopro.php:127
2586
- msgid "Advanced archive engine processes multi-gig sites - even on stubborn budget hosts!"
2587
- msgstr ""
2588
-
2589
- #: views/settings/gopro.php:133
2590
- msgid "Multiple Archive Engines"
2591
- msgstr ""
2592
-
2593
- #: views/settings/gopro.php:138
2594
- msgid "Server Throttling"
2595
- msgstr ""
2596
-
2597
- #: views/settings/gopro.php:143
2598
- msgid "Background Processing"
2599
- msgstr ""
2600
-
2601
- #: views/settings/gopro.php:148
2602
- msgid "Installer Passwords"
2603
- msgstr ""
2604
-
2605
- #: views/settings/gopro.php:153
2606
- msgid " Regenerate Salts"
2607
- msgstr ""
2608
-
2609
- #: views/settings/gopro.php:155
2610
- msgid "Regenerate Salts"
2611
- msgstr ""
2612
-
2613
- #: views/settings/gopro.php:156
2614
- msgid "Installer contains option to regenerate salts in the wp-config.php file. This feature is only available with Freelancer, Business or Gold licenses."
2615
- msgstr ""
2616
-
2617
- #: views/settings/gopro.php:162 views/settings/gopro.php:164
2618
- msgid "WP-Config Control Plus"
2619
- msgstr ""
2620
-
2621
- #: views/settings/gopro.php:165
2622
- msgid "Control many wp-config.php settings right from the installer!"
2623
- msgstr ""
2624
-
2625
- #: views/settings/gopro.php:173
2626
- msgid "cPanel Database API"
2627
- msgstr ""
2628
-
2629
- #: views/settings/gopro.php:177
2630
- msgid "Create the database and database user directly in the installer. No need to browse to your host's cPanel application."
2631
- msgstr ""
2632
-
2633
- #: views/settings/gopro.php:183
2634
- msgid "Multisite Network Migration"
2635
- msgstr ""
2636
-
2637
- #: views/settings/gopro.php:188
2638
- msgid "Multisite Subsite &gt; Standalone"
2639
- msgstr ""
2640
-
2641
- #: views/settings/gopro.php:190
2642
- msgid "Multisite"
2643
- msgstr ""
2644
-
2645
- #: views/settings/gopro.php:191
2646
- msgid "Install an individual subsite from a Multisite as a standalone site. This feature is only available with Business or Gold licenses."
2647
- msgstr ""
2648
-
2649
- #: views/settings/gopro.php:198
2650
- msgid "Custom Search & Replace"
2651
- msgstr ""
2652
-
2653
- #: views/settings/gopro.php:204
2654
- msgid "Email Alerts"
2655
- msgstr ""
2656
-
2657
- #: views/settings/gopro.php:210
2658
- msgid "Manual Transfers"
2659
- msgstr ""
2660
-
2661
- #: views/settings/gopro.php:216
2662
- msgid "Active Customer Support"
2663
- msgstr ""
2664
-
2665
- #: views/settings/gopro.php:219
2666
- msgid "Pro users get top priority for any requests to our support desk. In most cases responses will be answered in under 24 hours."
2667
- msgstr ""
2668
-
2669
- #: views/settings/gopro.php:225
2670
- msgid "Plus Many Other Features..."
2671
- msgstr ""
2672
-
2673
- #: views/settings/gopro.php:234
2674
- msgid "Check It Out!"
2675
- msgstr ""
2676
-
2677
- #: views/settings/license.php:4
2678
- msgid "Activation"
2679
- msgstr ""
2680
-
2681
- #: views/settings/license.php:9
2682
- #, php-format
2683
- msgid "%1$sManage Licenses%2$s"
2684
- msgstr ""
2685
-
2686
- #: views/settings/license.php:14
2687
- msgid "Duplicator Free"
2688
- msgstr ""
2689
-
2690
- #: views/settings/license.php:16
2691
- msgid "Basic Features"
2692
- msgstr ""
2693
-
2694
- #: views/settings/license.php:17
2695
- msgid "Pro Features"
2696
- msgstr ""
2697
-
2698
- #: views/settings/license.php:22
2699
- msgid "License Key"
2700
- msgstr ""
2701
-
2702
- #: views/settings/license.php:26
2703
- msgid "The free version of Duplicator does not require a license key. "
2704
- msgstr ""
2705
-
2706
- #: views/settings/license.php:28
2707
- msgid "Professional Users: Please note that if you have already purchased the Professional version it is a separate plugin that you download and install. You can download the Professional version from the email sent after your purchase or click on the 'Manage Licenses' link above to download the plugin from your snapcreek.com dashboard. "
2708
- msgstr ""
2709
-
2710
- #: views/settings/license.php:31
2711
- msgid "If you would like to purchase the professional version you can "
2712
- msgstr ""
2713
-
2714
- #: views/settings/license.php:32
2715
- msgid "get a copy here"
2716
- msgstr ""
2717
-
2718
- #: views/settings/packages.php:8
2719
- msgid "Package Settings Saved"
2720
- msgstr ""
2721
-
2722
- #: views/settings/packages.php:74
2723
- msgid "SQL Script"
2724
- msgstr ""
2725
-
2726
- #: views/settings/packages.php:78
2727
- msgid "Mysqldump"
2728
- msgstr ""
2729
-
2730
- #: views/settings/packages.php:88
2731
- msgid "PHP Code"
2732
- msgstr ""
2733
-
2734
- #: views/settings/packages.php:98
2735
- msgid "This server does not support the PHP shell_exec function which is required for mysqldump to run. "
2736
- msgstr ""
2737
-
2738
- #: views/settings/packages.php:99
2739
- msgid "Please contact the host or server administrator to enable this feature."
2740
- msgstr ""
2741
-
2742
- #: views/settings/packages.php:104 views/tools/diagnostics/logging.php:180
2743
- msgid "Host Recommendation:"
2744
- msgstr ""
2745
-
2746
- #: views/settings/packages.php:105 views/tools/diagnostics/logging.php:181
2747
- msgid "Duplicator recommends going with the high performance pro plan or better from our recommended list"
2748
- msgstr ""
2749
-
2750
- #: views/settings/packages.php:109
2751
- msgid "Please visit our recommended"
2752
- msgstr ""
2753
-
2754
- #: views/settings/packages.php:110 views/settings/packages.php:134
2755
- #: views/tools/diagnostics/logging.php:186
2756
- msgid "host list"
2757
- msgstr ""
2758
-
2759
- #: views/settings/packages.php:111
2760
- msgid "for reliable access to mysqldump"
2761
- msgstr ""
2762
-
2763
- #: views/settings/packages.php:122
2764
- msgid "Successfully Found:"
2765
- msgstr ""
2766
-
2767
- #: views/settings/packages.php:129
2768
- msgid "Mysqldump was not found at its default location or the location provided. Please enter a custom path to a valid location where mysqldump can run. If the problem persist contact your host or server administrator. "
2769
- msgstr ""
2770
-
2771
- #: views/settings/packages.php:133
2772
- msgid "See the"
2773
- msgstr ""
2774
-
2775
- #: views/settings/packages.php:135
2776
- msgid "for reliable access to mysqldump."
2777
- msgstr ""
2778
-
2779
- #: views/settings/packages.php:141
2780
- msgid "Custom Path"
2781
- msgstr ""
2782
-
2783
- #: views/settings/packages.php:143
2784
- msgid "mysqldump path:"
2785
- msgstr ""
2786
-
2787
- #: views/settings/packages.php:144
2788
- msgid "Add a custom path if the path to mysqldump is not properly detected. For all paths use a forward slash as the path seperator. On Linux systems use mysqldump for Windows systems use mysqldump.exe. If the path tried does not work please contact your hosting provider for details on the correct path."
2789
- msgstr ""
2790
-
2791
- #: views/settings/packages.php:148
2792
- msgid "/usr/bin/mypath/mysqldump"
2793
- msgstr ""
2794
-
2795
- #: views/settings/packages.php:152
2796
- msgid "<i class=\"fa fa-exclamation-triangle fa-sm\"></i> The custom path provided is not recognized as a valid mysqldump file:<br/>"
2797
- msgstr ""
2798
-
2799
- #: views/settings/packages.php:170
2800
- msgid "Single-Threaded"
2801
- msgstr ""
2802
-
2803
- #: views/settings/packages.php:173
2804
- msgid "Multi-Threaded"
2805
- msgstr ""
2806
-
2807
- #: views/settings/packages.php:177
2808
- msgid "PHP Code Mode:"
2809
- msgstr ""
2810
-
2811
- #: views/settings/packages.php:179
2812
- msgid "Single-Threaded mode attempts to create the entire database script in one request. Multi-Threaded mode allows the database script to be chunked over multiple requests. Multi-Threaded mode is typically slower but much more reliable especially for larger databases."
2813
- msgstr ""
2814
-
2815
- #: views/settings/packages.php:181
2816
- msgid "<br><br><i>Multi-Threaded mode is only available in Duplicator Pro.</i>"
2817
- msgstr ""
2818
-
2819
- #: views/settings/packages.php:184
2820
- msgid "Query Limit Size"
2821
- msgstr ""
2822
-
2823
- #: views/settings/packages.php:194
2824
- msgid "PHP Query Limit Size"
2825
- msgstr ""
2826
-
2827
- #: views/settings/packages.php:195
2828
- msgid "A higher limit size will speed up the database build time, however it will use more memory. If your host has memory caps start off low."
2829
- msgstr ""
2830
-
2831
- #: views/settings/packages.php:213
2832
- msgid "ZipArchive"
2833
- msgstr ""
2834
-
2835
- #: views/settings/packages.php:219
2836
- msgid "DupArchive"
2837
- msgstr ""
2838
-
2839
- #: views/settings/packages.php:228
2840
- msgid "Creates a archive format (archive.zip)."
2841
- msgstr ""
2842
-
2843
- #: views/settings/packages.php:229
2844
- msgid "This option uses the internal PHP ZipArchive classes to create a Zip file."
2845
- msgstr ""
2846
-
2847
- #: views/settings/packages.php:238
2848
- msgid "Creates a custom archive format (archive.daf)."
2849
- msgstr ""
2850
-
2851
- #: views/settings/packages.php:239
2852
- msgid "This option is recommended for large sites or sites on constrained servers."
2853
- msgstr ""
2854
-
2855
- #: views/settings/packages.php:246
2856
- msgid "Archive Flush"
2857
- msgstr ""
2858
-
2859
- #: views/settings/packages.php:249
2860
- msgid "Attempt Network Keep Alive"
2861
- msgstr ""
2862
-
2863
- #: views/settings/packages.php:250
2864
- msgid "enable only for large archives"
2865
- msgstr ""
2866
-
2867
- #: views/settings/packages.php:253
2868
- msgid "This will attempt to keep a network connection established for large archives."
2869
- msgstr ""
2870
-
2871
- #: views/settings/packages.php:254
2872
- msgid " Valid only when Archive Engine for ZipArchive is enabled."
2873
- msgstr ""
2874
-
2875
- #: views/settings/packages.php:261
2876
- msgid "Visual"
2877
- msgstr ""
2878
-
2879
- #: views/settings/packages.php:265
2880
- msgid "Created Format"
2881
- msgstr ""
2882
-
2883
- #: views/settings/packages.php:269
2884
- msgid "By Year"
2885
- msgstr ""
2886
-
2887
- #: views/settings/packages.php:276
2888
- msgid "By Month"
2889
- msgstr ""
2890
-
2891
- #: views/settings/packages.php:283
2892
- msgid "By Day"
2893
- msgstr ""
2894
-
2895
- #: views/settings/packages.php:291
2896
- msgid "The UTC date format shown in the 'Created' column on the Packages screen."
2897
- msgstr ""
2898
-
2899
- #: views/settings/packages.php:292
2900
- msgid "To use WordPress timezone formats consider an upgrade to Duplicator Pro."
2901
- msgstr ""
2902
-
2903
- #: views/settings/packages.php:301
2904
- msgid "Save Package Settings"
2905
- msgstr ""
2906
-
2907
- #: views/settings/schedule.php:14 views/tools/templates.php:15
2908
- msgid "This option is available in Duplicator Pro."
2909
- msgstr ""
2910
-
2911
- #: views/settings/schedule.php:15
2912
- msgid "Create robust schedules that automatically create packages while you sleep."
2913
- msgstr ""
2914
-
2915
- #: views/settings/schedule.php:17
2916
- msgid "Simply choose your storage location and when you want it to run."
2917
- msgstr ""
2918
-
2919
- #: views/settings/storage.php:15
2920
- msgid "Store your packages in multiple locations with Duplicator Pro"
2921
- msgstr ""
2922
-
2923
- #: views/settings/storage.php:20
2924
- msgid " Dropbox"
2925
- msgstr ""
2926
-
2927
- #: views/settings/storage.php:28
2928
- msgid "Set up a one-time storage location and automatically <br/> push the package to your destination."
2929
- msgstr ""
2930
-
2931
- #: views/tools/controller.php:22
2932
- msgid "Diagnostics"
2933
- msgstr ""
2934
-
2935
- #: views/tools/controller.php:23
2936
- msgid "Templates"
2937
- msgstr ""
2938
-
2939
- #: views/tools/diagnostics/inc.data.php:11
2940
- msgid "Stored Data"
2941
- msgstr ""
2942
-
2943
- #: views/tools/diagnostics/inc.data.php:16
2944
- msgid "Data Cleanup"
2945
- msgstr ""
2946
-
2947
- #: views/tools/diagnostics/inc.data.php:21
2948
- msgid "Remove Installation Files"
2949
- msgstr ""
2950
-
2951
- #: views/tools/diagnostics/inc.data.php:25
2952
- msgid "Removes all reserved installer files."
2953
- msgstr ""
2954
-
2955
- #: views/tools/diagnostics/inc.data.php:30
2956
- msgid "Clicking on the 'Remove Installation Files' button will attempt to remove the installer files used by Duplicator. These files should not be left on production systems for security reasons. Below are the files that should be removed."
2957
- msgstr ""
2958
-
2959
- #: views/tools/diagnostics/inc.data.php:45
2960
- msgid "Clear Build Cache"
2961
- msgstr ""
2962
-
2963
- #: views/tools/diagnostics/inc.data.php:48
2964
- msgid "Removes all build data from:"
2965
- msgstr ""
2966
-
2967
- #: views/tools/diagnostics/inc.data.php:53
2968
- msgid "Options Values"
2969
- msgstr ""
2970
-
2971
- #: views/tools/diagnostics/inc.data.php:87
2972
- msgid "Delete Option?"
2973
- msgstr ""
2974
-
2975
- #: views/tools/diagnostics/inc.data.php:88
2976
- msgid "Delete the option value just selected?"
2977
- msgstr ""
2978
-
2979
- #: views/tools/diagnostics/inc.data.php:89
2980
- msgid "Removing Option, Please Wait..."
2981
- msgstr ""
2982
-
2983
- #: views/tools/diagnostics/inc.data.php:94
2984
- msgid "Clear Build Cache?"
2985
- msgstr ""
2986
-
2987
- #: views/tools/diagnostics/inc.data.php:95
2988
- msgid "This process will remove all build cache files. Be sure no packages are currently building or else they will be cancelled."
2989
- msgstr ""
2990
-
2991
- #: views/tools/diagnostics/inc.data.php:107
2992
- msgid "Delete the option value"
2993
- msgstr ""
2994
-
2995
- #: views/tools/diagnostics/inc.phpinfo.php:17
2996
- msgid "PHP Information"
2997
- msgstr ""
2998
-
2999
- #: views/tools/diagnostics/inc.settings.php:5
3000
- #: views/tools/diagnostics/inc.settings.php:6
3001
- msgid "unknow"
3002
- msgstr ""
3003
-
3004
- #: views/tools/diagnostics/inc.settings.php:23
3005
- msgid "Server Settings"
3006
- msgstr ""
3007
-
3008
- #: views/tools/diagnostics/inc.settings.php:32
3009
- msgid "Duplicator Version"
3010
- msgstr ""
3011
-
3012
- #: views/tools/diagnostics/inc.settings.php:39
3013
- msgid "Operating System"
3014
- msgstr ""
3015
-
3016
- #: views/tools/diagnostics/inc.settings.php:43
3017
- msgid "Timezone"
3018
- msgstr ""
3019
-
3020
- #: views/tools/diagnostics/inc.settings.php:47
3021
- msgid "Server Time"
3022
- msgstr ""
3023
-
3024
- #: views/tools/diagnostics/inc.settings.php:59
3025
- msgid "ABSPATH"
3026
- msgstr ""
3027
-
3028
- #: views/tools/diagnostics/inc.settings.php:63
3029
- msgid "Plugins Path"
3030
- msgstr ""
3031
-
3032
- #: views/tools/diagnostics/inc.settings.php:67
3033
- msgid "Loaded PHP INI"
3034
- msgstr ""
3035
-
3036
- #: views/tools/diagnostics/inc.settings.php:71
3037
- msgid "Server IP"
3038
- msgstr ""
3039
-
3040
- #: views/tools/diagnostics/inc.settings.php:78
3041
- msgid "Can't detect"
3042
- msgstr ""
3043
-
3044
- #: views/tools/diagnostics/inc.settings.php:84
3045
- msgid "Client IP"
3046
- msgstr ""
3047
-
3048
- #: views/tools/diagnostics/inc.settings.php:95
3049
- msgid "Language"
3050
- msgstr ""
3051
-
3052
- #: views/tools/diagnostics/inc.settings.php:99
3053
- #: views/tools/diagnostics/inc.settings.php:191
3054
- msgid "Charset"
3055
- msgstr ""
3056
-
3057
- #: views/tools/diagnostics/inc.settings.php:103
3058
- msgid "Memory Limit "
3059
- msgstr ""
3060
-
3061
- #: views/tools/diagnostics/inc.settings.php:104
3062
- msgid "Max"
3063
- msgstr ""
3064
-
3065
- #: views/tools/diagnostics/inc.settings.php:122
3066
- msgid "Process"
3067
- msgstr ""
3068
-
3069
- #: views/tools/diagnostics/inc.settings.php:126
3070
- msgid "Safe Mode"
3071
- msgstr ""
3072
-
3073
- #: views/tools/diagnostics/inc.settings.php:130
3074
- msgid "On"
3075
- msgstr ""
3076
-
3077
- #: views/tools/diagnostics/inc.settings.php:130
3078
- msgid "Off"
3079
- msgstr ""
3080
-
3081
- #: views/tools/diagnostics/inc.settings.php:135
3082
- msgid "Memory Limit"
3083
- msgstr ""
3084
-
3085
- #: views/tools/diagnostics/inc.settings.php:139
3086
- msgid "Memory In Use"
3087
- msgstr ""
3088
-
3089
- #: views/tools/diagnostics/inc.settings.php:143
3090
- #: views/tools/diagnostics/inc.settings.php:152
3091
- msgid "Max Execution Time"
3092
- msgstr ""
3093
-
3094
- #: views/tools/diagnostics/inc.settings.php:153
3095
- msgid "If the value shows dynamic then this means its possible for PHP to run longer than the default. If the value is fixed then PHP will not be allowed to run longer than the default."
3096
- msgstr ""
3097
-
3098
- #: views/tools/diagnostics/inc.settings.php:158
3099
- msgid "Shell Exec"
3100
- msgstr ""
3101
-
3102
- #: views/tools/diagnostics/inc.settings.php:159
3103
- #: views/tools/diagnostics/inc.settings.php:163
3104
- msgid "Is Supported"
3105
- msgstr ""
3106
-
3107
- #: views/tools/diagnostics/inc.settings.php:159
3108
- #: views/tools/diagnostics/inc.settings.php:163
3109
- msgid "Not Supported"
3110
- msgstr ""
3111
-
3112
- #: views/tools/diagnostics/inc.settings.php:162
3113
- msgid "Shell Exec Zip"
3114
- msgstr ""
3115
-
3116
- #: views/tools/diagnostics/inc.settings.php:166
3117
- msgid "Suhosin Extension"
3118
- msgstr ""
3119
-
3120
- #: views/tools/diagnostics/inc.settings.php:170
3121
- msgid "Architecture "
3122
- msgstr ""
3123
-
3124
- #: views/tools/diagnostics/inc.settings.php:176
3125
- msgid "Error Log File "
3126
- msgstr ""
3127
-
3128
- #: views/tools/diagnostics/inc.settings.php:187
3129
- msgid "Comments"
3130
- msgstr ""
3131
-
3132
- #: views/tools/diagnostics/inc.settings.php:195
3133
- msgid "Wait Timeout"
3134
- msgstr ""
3135
-
3136
- #: views/tools/diagnostics/inc.settings.php:199
3137
- msgid "Max Allowed Packets"
3138
- msgstr ""
3139
-
3140
- #: views/tools/diagnostics/inc.settings.php:203
3141
- msgid "msyqldump Path"
3142
- msgstr ""
3143
-
3144
- #: views/tools/diagnostics/inc.settings.php:207
3145
- msgid "Server Disk"
3146
- msgstr ""
3147
-
3148
- #: views/tools/diagnostics/inc.settings.php:210
3149
- msgid "Free space"
3150
- msgstr ""
3151
-
3152
- #: views/tools/diagnostics/inc.settings.php:213
3153
- msgid "Note: This value is the physical servers hard-drive allocation."
3154
- msgstr ""
3155
-
3156
- #: views/tools/diagnostics/inc.settings.php:214
3157
- msgid "On shared hosts check your control panel for the 'TRUE' disk space quota value."
3158
- msgstr ""
3159
-
3160
- #: views/tools/diagnostics/inc.validator.php:16
3161
- msgid "Run Validator"
3162
- msgstr ""
3163
-
3164
- #: views/tools/diagnostics/inc.validator.php:17
3165
- msgid "This will run the scan validation check. This may take several minutes. Do you want to Continue?"
3166
- msgstr ""
3167
-
3168
- #: views/tools/diagnostics/inc.validator.php:28
3169
- msgid "Scan Validator"
3170
- msgstr ""
3171
-
3172
- #: views/tools/diagnostics/inc.validator.php:33
3173
- msgid "This utility will help to find unreadable files and sys-links in your environment that can lead to issues during the scan process. "
3174
- msgstr ""
3175
-
3176
- #: views/tools/diagnostics/inc.validator.php:34
3177
- msgid "The utility will also shows how many files and directories you have in your system. This process may take several minutes to run. "
3178
- msgstr ""
3179
-
3180
- #: views/tools/diagnostics/inc.validator.php:35
3181
- msgid "If there is a recursive loop on your system then the process has a built in check to stop after a large set of files and directories have been scanned. "
3182
- msgstr ""
3183
-
3184
- #: views/tools/diagnostics/inc.validator.php:36
3185
- msgid "A message will show indicated that that a scan depth has been reached. If you have issues with the package scanner (step 2) during the build process then try to add The paths below to your file filters to allow the scanner to finish."
3186
- msgstr ""
3187
-
3188
- #: views/tools/diagnostics/inc.validator.php:43
3189
- #: views/tools/diagnostics/inc.validator.php:153
3190
- msgid "Run Scan Integrity Validation"
3191
- msgstr ""
3192
-
3193
- #: views/tools/diagnostics/inc.validator.php:77
3194
- msgid "Note: Symlinks are not discoverable on Windows OS with PHP"
3195
- msgstr ""
3196
-
3197
- #: views/tools/diagnostics/inc.validator.php:122
3198
- msgid "Scanning Environment... This may take a few minutes."
3199
- msgstr ""
3200
-
3201
- #: views/tools/diagnostics/information.php:25
3202
- msgid "File Found: Unable to remove"
3203
- msgstr ""
3204
-
3205
- #: views/tools/diagnostics/information.php:26
3206
- msgid "Removed"
3207
- msgstr ""
3208
-
3209
- #: views/tools/diagnostics/information.php:44
3210
- msgid "Installer file cleanup ran!"
3211
- msgstr ""
3212
-
3213
- #: views/tools/diagnostics/information.php:48
3214
- msgid "Build cache removed."
3215
- msgstr ""
3216
-
3217
- #: views/tools/diagnostics/information.php:125
3218
- msgid "No Duplicator installer files found on this WordPress Site."
3219
- msgstr ""
3220
-
3221
- #: views/tools/diagnostics/information.php:132
3222
- msgid "Security Notes"
3223
- msgstr ""
3224
-
3225
- #: views/tools/diagnostics/information.php:133
3226
- msgid "If the installer files do not successfully get removed with this action, then they WILL need to be removed manually through your hosts control panel or FTP. Please remove all installer files to avoid any security issues on this site. For more details please visit the FAQ link <a href=\"https://snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-295-q\" target=\"_blank\">Which files need to be removed after an install?</a>"
3227
- msgstr ""
3228
-
3229
- #: views/tools/diagnostics/information.php:140
3230
- msgid "Some of the installer files did not get removed, "
3231
- msgstr ""
3232
-
3233
- #: views/tools/diagnostics/information.php:142
3234
- msgid "please retry the installer cleanup process"
3235
- msgstr ""
3236
-
3237
- #: views/tools/diagnostics/information.php:144
3238
- msgid " If this process continues please see the previous FAQ link."
3239
- msgstr ""
3240
-
3241
- #: views/tools/diagnostics/information.php:148
3242
- msgid "Help Support Duplicator"
3243
- msgstr ""
3244
-
3245
- #: views/tools/diagnostics/information.php:149
3246
- msgid "The Duplicator team has worked many years to make moving a WordPress site a much easier process. Show your support with a <a href=\"https://wordpress.org/support/plugin/duplicator/reviews/?filter=5\" target=\"_blank\">5 star review</a>! We would be thrilled if you could!"
3247
- msgstr ""
3248
-
3249
- #: views/tools/diagnostics/information.php:159
3250
- msgid "Please test the entire site to validate the migration process!"
3251
- msgstr ""
3252
-
3253
- #: views/tools/diagnostics/information.php:165
3254
- msgid "NOTICE: Safe mode (Basic) was enabled during install, be sure to re-enable all your plugins."
3255
- msgstr ""
3256
-
3257
- #: views/tools/diagnostics/information.php:170
3258
- msgid "NOTICE: Safe mode (Advanced) was enabled during install, be sure to re-enable all your plugins."
3259
- msgstr ""
3260
-
3261
- #: views/tools/diagnostics/information.php:212
3262
- msgid "Plugin settings reset."
3263
- msgstr ""
3264
-
3265
- #: views/tools/diagnostics/information.php:213
3266
- msgid "View state settings reset."
3267
- msgstr ""
3268
-
3269
- #: views/tools/diagnostics/information.php:214
3270
- msgid "Active package settings reset."
3271
- msgstr ""
3272
-
3273
- #: views/tools/diagnostics/logging.php:166
3274
- msgid "Log file not found or unreadable"
3275
- msgstr ""
3276
-
3277
- #: views/tools/diagnostics/logging.php:167
3278
- msgid "Try to create a package, since no log files were found in the snapshots directory with the extension *.log"
3279
- msgstr ""
3280
-
3281
- #: views/tools/diagnostics/logging.php:168
3282
- msgid "Reasons for log file not showing"
3283
- msgstr ""
3284
-
3285
- #: views/tools/diagnostics/logging.php:169
3286
- msgid "The web server does not support returning .log file extentions"
3287
- msgstr ""
3288
-
3289
- #: views/tools/diagnostics/logging.php:170
3290
- msgid "The snapshots directory does not have the correct permissions to write files. Try setting the permissions to 755"
3291
- msgstr ""
3292
-
3293
- #: views/tools/diagnostics/logging.php:171
3294
- msgid "The process that PHP runs under does not have enough permissions to create files. Please contact your hosting provider for more details"
3295
- msgstr ""
3296
-
3297
- #: views/tools/diagnostics/logging.php:185
3298
- msgid "Consider our recommended"
3299
- msgstr ""
3300
-
3301
- #: views/tools/diagnostics/logging.php:187
3302
- msgid "if you’re unhappy with your current provider"
3303
- msgstr ""
3304
-
3305
- #: views/tools/diagnostics/logging.php:191
3306
- #: views/tools/diagnostics/logging.php:196
3307
- msgid "Options"
3308
- msgstr ""
3309
-
3310
- #: views/tools/diagnostics/logging.php:198
3311
- msgid "Refresh"
3312
- msgstr ""
3313
-
3314
- #: views/tools/diagnostics/logging.php:201
3315
- msgid "Auto Refresh"
3316
- msgstr ""
3317
-
3318
- #: views/tools/diagnostics/logging.php:207
3319
- msgid "Package Logs"
3320
- msgstr ""
3321
-
3322
- #: views/tools/diagnostics/logging.php:208
3323
- msgid "Top 20"
3324
- msgstr ""
3325
-
3326
- #: views/tools/diagnostics/main.php:43
3327
- msgid "Information"
3328
- msgstr ""
3329
-
3330
- #: views/tools/diagnostics/main.php:44
3331
- msgid "Logs"
3332
- msgstr ""
3333
-
3334
- #: views/tools/diagnostics/support.php:32
3335
- msgid "Migrating WordPress is a complex process and the logic to make all the magic happen smoothly may not work quickly with every site. With over 30,000 plugins and a very complex server eco-system some migrations may run into issues. This is why the Duplicator includes a detailed knowledgebase that can help with many common issues. Resources to additional support, approved hosting, and alternatives to fit your needs can be found below."
3336
- msgstr ""
3337
-
3338
- #: views/tools/diagnostics/support.php:44
3339
- msgid "Knowledgebase"
3340
- msgstr ""
3341
-
3342
- #: views/tools/diagnostics/support.php:47
3343
- msgid "Complete Online Documentation"
3344
- msgstr ""
3345
-
3346
- #: views/tools/diagnostics/support.php:49
3347
- msgid "Choose A Section"
3348
- msgstr ""
3349
-
3350
- #: views/tools/diagnostics/support.php:50
3351
- msgid "Quick Start"
3352
- msgstr ""
3353
-
3354
- #: views/tools/diagnostics/support.php:52
3355
- msgid "User Guide"
3356
- msgstr ""
3357
-
3358
- #: views/tools/diagnostics/support.php:54
3359
- msgid "FAQs"
3360
- msgstr ""
3361
-
3362
- #: views/tools/diagnostics/support.php:56
3363
- msgid "Change Log"
3364
- msgstr ""
3365
-
3366
- #: views/tools/diagnostics/support.php:66
3367
- msgid "Online Support"
3368
- msgstr ""
3369
-
3370
- #: views/tools/diagnostics/support.php:69
3371
- msgid "Get Help From IT Professionals"
3372
- msgstr ""
3373
-
3374
- #: views/tools/diagnostics/support.php:73
3375
- msgid "Get Support!"
3376
- msgstr ""
3377
-
3378
- #: views/tools/diagnostics/support.php:87
3379
- msgid "Approved Hosting"
3380
- msgstr ""
3381
-
3382
- #: views/tools/diagnostics/support.php:90
3383
- msgid "Servers That Work With Duplicator"
3384
- msgstr ""
3385
-
3386
- #: views/tools/diagnostics/support.php:93
3387
- msgid "Trusted Providers!"
3388
- msgstr ""
3389
-
3390
- #: views/tools/diagnostics/support.php:104
3391
- msgid "Alternatives"
3392
- msgstr ""
3393
-
3394
- #: views/tools/diagnostics/support.php:107
3395
- msgid "Other Commercial Resources"
3396
- msgstr ""
3397
-
3398
- #: views/tools/diagnostics/support.php:110
3399
- msgid "Pro Solutions!"
3400
- msgstr ""
3401
-
3402
- #: views/tools/templates.php:16
3403
- msgid "Templates allow you to customize what you want to include in your site and store it as a re-usable profile."
3404
- msgstr ""
3405
-
3406
- #: views/tools/templates.php:18
3407
- msgid "Save time and create a template that can be applied to a schedule or a custom package setup."
3408
- msgstr ""
1
+ # Copyright (C) 2019 Snap Creek
2
+ # This file is distributed under the same license as the Duplicator plugin.
3
+ #, fuzzy
4
+ msgid ""
5
+ msgstr ""
6
+ "Project-Id-Version: Duplicator 1.3.7\n"
7
+ "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/duplicator\n"
8
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
9
+ "Language-Team: LANGUAGE <LL@li.org>\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "POT-Creation-Date: 2019-09-02 12:30+0530\n"
14
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
15
+ "X-Generator: Poedit 2.2.3\n"
16
+ "X-Poedit-KeywordsList: __;_e;esc_html_e;esc_html__;_x;_ex;esc_attr_e;esc_attr__\n"
17
+ "X-Poedit-Basepath: ..\n"
18
+ "X-Poedit-SearchPath-0: .\n"
19
+
20
+ #: classes/class.logging.php:141
21
+ msgid "No Log"
22
+ msgstr ""
23
+
24
+ #: classes/class.server.php:207
25
+ msgid "(directory)"
26
+ msgstr ""
27
+
28
+ #: classes/package/class.pack.database.php:663
29
+ msgid "Please contact your DataBase administrator to fix the error."
30
+ msgstr ""
31
+
32
+ #: classes/package/class.pack.installer.php:90
33
+ msgid "Error reading DupArchive mini expander"
34
+ msgstr ""
35
+
36
+ #: classes/package/class.pack.installer.php:103
37
+ msgid "Error writing installer contents"
38
+ msgstr ""
39
+
40
+ #: classes/package/class.pack.php:309
41
+ msgid "Package name can't be empty"
42
+ msgstr ""
43
+
44
+ #: classes/package/class.pack.php:315
45
+ #, php-format
46
+ msgid "Directories: <b>%1$s</b> isn't a valid path"
47
+ msgstr ""
48
+
49
+ #: classes/package/class.pack.php:321
50
+ #, php-format
51
+ msgid "File extension: <b>%1$s</b> isn't a valid extension"
52
+ msgstr ""
53
+
54
+ #: classes/package/class.pack.php:327
55
+ #, php-format
56
+ msgid "Files: <b>%1$s</b> isn't a valid file name"
57
+ msgstr ""
58
+
59
+ #: classes/package/class.pack.php:335
60
+ #, php-format
61
+ msgid "MySQL Server Host: <b>%1$s</b> isn't a valid host"
62
+ msgstr ""
63
+
64
+ #: classes/package/class.pack.php:346
65
+ #, php-format
66
+ msgid "MySQL Server Port: <b>%1$s</b> isn't a valid port"
67
+ msgstr ""
68
+
69
+ #: classes/package/class.pack.php:845
70
+ #, php-format
71
+ msgid "Can't find Scanfile %s. Please ensure there no non-English characters in the package or schedule name."
72
+ msgstr ""
73
+
74
+ #: classes/package/class.pack.php:868
75
+ #, php-format
76
+ msgid "EXPECTED FILE/DIRECTORY COUNT: %1$s"
77
+ msgstr ""
78
+
79
+ #: classes/package/class.pack.php:869
80
+ #, php-format
81
+ msgid "ACTUAL FILE/DIRECTORY COUNT: %1$s"
82
+ msgstr ""
83
+
84
+ #: classes/package/class.pack.php:913
85
+ #, php-format
86
+ msgid "ERROR: Cannot open created archive. Error code = %1$s"
87
+ msgstr ""
88
+
89
+ #: classes/package/class.pack.php:918
90
+ msgid "ERROR: Archive is not valid zip archive."
91
+ msgstr ""
92
+
93
+ #: classes/package/class.pack.php:922
94
+ msgid "ERROR: Archive doesn't pass consistency check."
95
+ msgstr ""
96
+
97
+ #: classes/package/class.pack.php:927
98
+ msgid "ERROR: Archive checksum is bad."
99
+ msgstr ""
100
+
101
+ #: classes/package/class.pack.php:938
102
+ msgid "ARCHIVE CONSISTENCY TEST: Pass"
103
+ msgstr ""
104
+
105
+ #: classes/package/duparchive/class.pack.archive.duparchive.php:44
106
+ msgid "Package build appears stuck so marking package as failed. Is the Max Worker Time set too high?."
107
+ msgstr ""
108
+
109
+ #: classes/package/duparchive/class.pack.archive.duparchive.php:45
110
+ msgid "Build Failure"
111
+ msgstr ""
112
+
113
+ #: classes/package/duparchive/class.pack.archive.duparchive.php:83
114
+ msgid "Click on \"Resolve This\" button to fix the JSON settings."
115
+ msgstr ""
116
+
117
+ #: classes/package/duparchive/class.pack.archive.duparchive.php:95
118
+ #, php-format
119
+ msgid "ERROR: Can't find Scanfile %s. Please ensure there no non-English characters in the package or schedule name."
120
+ msgstr ""
121
+
122
+ #: classes/package/duparchive/class.pack.archive.duparchive.php:214
123
+ msgid "Problem adding items to archive."
124
+ msgstr ""
125
+
126
+ #: classes/package/duparchive/class.pack.archive.duparchive.php:216
127
+ msgid "Problems adding items to archive."
128
+ msgstr ""
129
+
130
+ #: classes/package/duparchive/class.pack.archive.duparchive.php:314
131
+ msgid "Critical failure present in validation"
132
+ msgstr ""
133
+
134
+ #: classes/ui/class.ui.dialog.php:95
135
+ msgid "Processing please wait..."
136
+ msgstr ""
137
+
138
+ #: classes/ui/class.ui.dialog.php:98
139
+ msgid "OK"
140
+ msgstr ""
141
+
142
+ #: classes/ui/class.ui.dialog.php:99 deactivation.php:135
143
+ msgid "Cancel"
144
+ msgstr ""
145
+
146
+ #: classes/ui/class.ui.notice.php:47
147
+ msgid "Safe Mode:"
148
+ msgstr ""
149
+
150
+ #: classes/ui/class.ui.notice.php:48
151
+ msgid "During the install safe mode was enabled deactivating all plugins.<br/> Please be sure to "
152
+ msgstr ""
153
+
154
+ #: classes/ui/class.ui.notice.php:49
155
+ msgid "re-activate the plugins"
156
+ msgstr ""
157
+
158
+ #: classes/ui/class.ui.notice.php:56
159
+ #: views/tools/diagnostics/information.php:158
160
+ msgid "This site has been successfully migrated!"
161
+ msgstr ""
162
+
163
+ #: classes/ui/class.ui.notice.php:57
164
+ msgid "Final step(s):"
165
+ msgstr ""
166
+
167
+ #: classes/ui/class.ui.notice.php:58
168
+ msgid "This message will be removed after all installer files are removed. Installer files must be removed to maintain a secure site. Click the link above or button below to remove all installer files and complete the migration."
169
+ msgstr ""
170
+
171
+ #: classes/ui/class.ui.notice.php:62
172
+ msgid "Remove Installation Files Now!"
173
+ msgstr ""
174
+
175
+ #: classes/ui/class.ui.notice.php:63
176
+ msgid "Optionally, Review Duplicator at WordPress.org..."
177
+ msgstr ""
178
+
179
+ #: classes/ui/class.ui.notice.php:69
180
+ msgid "Migration Almost Complete!"
181
+ msgstr ""
182
+
183
+ #: classes/ui/class.ui.notice.php:70
184
+ msgid "Reserved Duplicator installation files have been detected in the root directory. Please delete these installation files to avoid security issues. <br/> Go to:Duplicator > Tools > Information >Stored Data and click the \"Remove Installation Files\" button"
185
+ msgstr ""
186
+
187
+ #: classes/ui/class.ui.notice.php:76
188
+ msgid "Take me there now!"
189
+ msgstr ""
190
+
191
+ #: classes/ui/class.ui.notice.php:91
192
+ msgid "Redirecting Please Wait..."
193
+ msgstr ""
194
+
195
+ #: classes/ui/class.ui.notice.php:94
196
+ msgid "Invalid token permissions to perform this request."
197
+ msgstr ""
198
+
199
+ #: classes/ui/class.ui.notice.php:117
200
+ #, php-format
201
+ msgid "Activate %s"
202
+ msgstr ""
203
+
204
+ #: classes/ui/class.ui.screen.base.php:44
205
+ msgid "<b>Need Help?</b> Please check out these resources first:<ul>"
206
+ msgstr ""
207
+
208
+ #: classes/ui/class.ui.screen.base.php:52 views/settings/gopro.php:218
209
+ #: views/tools/diagnostics/main.php:45
210
+ msgid "Support"
211
+ msgstr ""
212
+
213
+ #: classes/ui/class.ui.screen.base.php:65
214
+ msgid "Resources"
215
+ msgstr ""
216
+
217
+ #: classes/ui/class.ui.screen.base.php:66
218
+ msgid "Knowledge Base"
219
+ msgstr ""
220
+
221
+ #: classes/ui/class.ui.screen.base.php:67
222
+ msgid "Full User Guide"
223
+ msgstr ""
224
+
225
+ #: classes/ui/class.ui.screen.base.php:68
226
+ msgid "Technical FAQs"
227
+ msgstr ""
228
+
229
+ #: classes/ui/class.ui.screen.base.php:69
230
+ msgid "Package Settings"
231
+ msgstr ""
232
+
233
+ #: classes/utilities/class.u.php:64
234
+ msgid "32-bit"
235
+ msgstr ""
236
+
237
+ #: classes/utilities/class.u.php:67
238
+ msgid "64-bit"
239
+ msgstr ""
240
+
241
+ #: classes/utilities/class.u.php:70
242
+ msgid "Unknown"
243
+ msgstr ""
244
+
245
+ #: classes/utilities/class.u.php:496
246
+ msgid "You do not have sufficient permissions to access this page."
247
+ msgstr ""
248
+
249
+ #: ctrls/ctrl.package.php:175
250
+ msgid "Error building DupArchive package"
251
+ msgstr ""
252
+
253
+ #: ctrls/ctrl.package.php:303
254
+ msgid "An unathorized security request was made to this page. Please try again!"
255
+ msgstr ""
256
+
257
+ #: ctrls/ctrl.package.php:325
258
+ msgid "Active package object error"
259
+ msgstr ""
260
+
261
+ #: ctrls/ctrl.package.php:488 ctrls/ctrl.package.php:506
262
+ msgid "Couldn't find a local copy of the file requested."
263
+ msgstr ""
264
+
265
+ #: deactivation.php:48
266
+ msgid "Need help? We are ready to answer your questions."
267
+ msgstr ""
268
+
269
+ #: deactivation.php:48
270
+ msgid "Contact Support"
271
+ msgstr ""
272
+
273
+ #: deactivation.php:53
274
+ msgid "It's not working on my server."
275
+ msgstr ""
276
+
277
+ #: deactivation.php:55
278
+ msgid "Kindly share what didn't work so we can fix it in future updates..."
279
+ msgstr ""
280
+
281
+ #: deactivation.php:60
282
+ msgid "It's too confusing to understand."
283
+ msgstr ""
284
+
285
+ #: deactivation.php:62
286
+ msgid "Please tell us what is not clear so that we can improve it."
287
+ msgstr ""
288
+
289
+ #: deactivation.php:67
290
+ msgid "I found a different plugin that I like better."
291
+ msgstr ""
292
+
293
+ #: deactivation.php:69
294
+ msgid "What's the plugin name?"
295
+ msgstr ""
296
+
297
+ #: deactivation.php:73
298
+ msgid "It does not do what I need."
299
+ msgstr ""
300
+
301
+ #: deactivation.php:75
302
+ msgid "What does it need to do?"
303
+ msgstr ""
304
+
305
+ #: deactivation.php:79
306
+ msgid "It's a temporary deactivation, I use the plugin all the time."
307
+ msgstr ""
308
+
309
+ #: deactivation.php:85
310
+ #, php-format
311
+ msgid "I'm switching over to the %s"
312
+ msgstr ""
313
+
314
+ #: deactivation.php:85
315
+ msgid "Pro version"
316
+ msgstr ""
317
+
318
+ #: deactivation.php:128
319
+ msgid "Quick Feedback"
320
+ msgstr ""
321
+
322
+ #: deactivation.php:129
323
+ msgid "If you have a moment, please let us know why you are deactivating"
324
+ msgstr ""
325
+
326
+ #: deactivation.php:136 deactivation.php:344
327
+ msgid "Skip & Deactivate"
328
+ msgstr ""
329
+
330
+ #: deactivation.php:137
331
+ msgid "Send & Deactivate"
332
+ msgstr ""
333
+
334
+ #: deactivation.php:140
335
+ msgid "Your response is sent anonymously."
336
+ msgstr ""
337
+
338
+ #: deactivation.php:235 deactivation.php:236
339
+ msgid "Processing"
340
+ msgstr ""
341
+
342
+ #: deactivation.php:283
343
+ msgid "Please tell us the reason so we can improve it."
344
+ msgstr ""
345
+
346
+ #: duplicator.php:398 views/packages/details/controller.php:48
347
+ #: views/packages/main/packages.php:88 views/packages/main/s1.setup1.php:72
348
+ #: views/packages/main/s2.scan1.php:185 views/packages/main/s3.build.php:90
349
+ #: views/settings/controller.php:23
350
+ msgid "Packages"
351
+ msgstr ""
352
+
353
+ #: duplicator.php:404 views/tools/controller.php:19
354
+ msgid "Tools"
355
+ msgstr ""
356
+
357
+ #: duplicator.php:409 views/packages/main/packages.php:85
358
+ #: views/settings/controller.php:19 views/settings/general.php:179
359
+ msgid "Settings"
360
+ msgstr ""
361
+
362
+ #: duplicator.php:413
363
+ msgid "Go Pro!"
364
+ msgstr ""
365
+
366
+ #: duplicator.php:481 views/settings/license.php:8
367
+ msgid "Manage"
368
+ msgstr ""
369
+
370
+ #: duplicator.php:498 views/packages/main/packages.php:82
371
+ msgid "Get Help"
372
+ msgstr ""
373
+
374
+ #: duplicator.php:498
375
+ msgid "Go Pro"
376
+ msgstr ""
377
+
378
+ #: views/packages/details/controller.php:13
379
+ msgid "package log"
380
+ msgstr ""
381
+
382
+ #: views/packages/details/controller.php:14
383
+ msgid "FAQ"
384
+ msgstr ""
385
+
386
+ #: views/packages/details/controller.php:15
387
+ msgid "resources page"
388
+ msgstr ""
389
+
390
+ #: views/packages/details/controller.php:34
391
+ msgid "This package contains an error. Please review the "
392
+ msgstr ""
393
+
394
+ #: views/packages/details/controller.php:34
395
+ msgid " for details."
396
+ msgstr ""
397
+
398
+ #: views/packages/details/controller.php:35
399
+ msgid "For help visit the "
400
+ msgstr ""
401
+
402
+ #: views/packages/details/controller.php:35
403
+ msgid " and "
404
+ msgstr ""
405
+
406
+ #: views/packages/details/controller.php:42
407
+ msgid "Details"
408
+ msgstr ""
409
+
410
+ #: views/packages/details/controller.php:45
411
+ msgid "Transfer"
412
+ msgstr ""
413
+
414
+ #: views/packages/details/detail.php:63
415
+ msgid "Invalid Package ID request. Please try again!"
416
+ msgstr ""
417
+
418
+ #: views/packages/details/detail.php:75 views/settings/controller.php:22
419
+ #: views/tools/diagnostics/inc.settings.php:29
420
+ msgid "General"
421
+ msgstr ""
422
+
423
+ #: views/packages/details/detail.php:81 views/packages/details/detail.php:184
424
+ #: views/packages/main/packages.php:138 views/packages/main/s1.setup2.php:73
425
+ #: views/packages/main/s1.setup2.php:99 views/packages/main/s2.scan3.php:529
426
+ #: views/packages/main/s3.build.php:133
427
+ msgid "Name"
428
+ msgstr ""
429
+
430
+ #: views/packages/details/detail.php:85
431
+ msgid "ID"
432
+ msgstr ""
433
+
434
+ #: views/packages/details/detail.php:86
435
+ msgid "Hash"
436
+ msgstr ""
437
+
438
+ #: views/packages/details/detail.php:87
439
+ msgid "Full Name"
440
+ msgstr ""
441
+
442
+ #: views/packages/details/detail.php:92 views/packages/main/s1.setup2.php:82
443
+ #: views/packages/main/s2.scan3.php:530
444
+ msgid "Notes"
445
+ msgstr ""
446
+
447
+ #: views/packages/details/detail.php:93
448
+ msgid "- no notes -"
449
+ msgstr ""
450
+
451
+ #: views/packages/details/detail.php:96
452
+ msgid "Versions"
453
+ msgstr ""
454
+
455
+ #: views/packages/details/detail.php:100 views/packages/main/s2.scan2.php:106
456
+ msgid "WordPress"
457
+ msgstr ""
458
+
459
+ #: views/packages/details/detail.php:100 views/packages/details/detail.php:101
460
+ #: views/packages/details/detail.php:103 views/packages/details/detail.php:104
461
+ #: views/packages/details/detail.php:118
462
+ msgid "- unknown -"
463
+ msgstr ""
464
+
465
+ #: views/packages/details/detail.php:101
466
+ msgid "PHP"
467
+ msgstr ""
468
+
469
+ #: views/packages/details/detail.php:102
470
+ msgid "Mysql"
471
+ msgstr ""
472
+
473
+ #: views/packages/details/detail.php:109
474
+ msgid "Runtime"
475
+ msgstr ""
476
+
477
+ #: views/packages/details/detail.php:110
478
+ msgid "error running"
479
+ msgstr ""
480
+
481
+ #: views/packages/details/detail.php:113
482
+ msgid "Status"
483
+ msgstr ""
484
+
485
+ #: views/packages/details/detail.php:114
486
+ msgid "completed"
487
+ msgstr ""
488
+
489
+ #: views/packages/details/detail.php:114
490
+ msgid "in-complete"
491
+ msgstr ""
492
+
493
+ #: views/packages/details/detail.php:117 views/packages/details/detail.php:366
494
+ #: views/packages/main/s1.setup2.php:472
495
+ #: views/tools/diagnostics/inc.settings.php:118
496
+ msgid "User"
497
+ msgstr ""
498
+
499
+ #: views/packages/details/detail.php:121 views/packages/details/detail.php:269
500
+ #: views/packages/main/s1.setup2.php:158 views/packages/main/s2.scan3.php:28
501
+ #: views/packages/main/s2.scan3.php:586 views/packages/main/s2.scan3.php:638
502
+ msgid "Files"
503
+ msgstr ""
504
+
505
+ #: views/packages/details/detail.php:129
506
+ msgid "Log"
507
+ msgstr ""
508
+
509
+ #: views/packages/details/detail.php:130
510
+ msgid "Share"
511
+ msgstr ""
512
+
513
+ #: views/packages/details/detail.php:138 views/packages/details/detail.php:226
514
+ #: views/packages/main/packages.php:208 views/packages/main/s1.setup2.php:142
515
+ #: views/packages/main/s2.scan3.php:21 views/packages/main/s3.build.php:146
516
+ #: views/settings/packages.php:204
517
+ msgid "Archive"
518
+ msgstr ""
519
+
520
+ #: views/packages/details/detail.php:142 views/packages/details/detail.php:325
521
+ #: views/packages/main/packages.php:205 views/packages/main/s1.setup2.php:381
522
+ #: views/packages/main/s3.build.php:143
523
+ msgid "Installer"
524
+ msgstr ""
525
+
526
+ #: views/packages/details/detail.php:146 views/packages/details/detail.php:362
527
+ #: views/packages/main/s1.setup2.php:159 views/packages/main/s1.setup2.php:468
528
+ #: views/packages/main/s2.scan3.php:365 views/packages/main/s2.scan3.php:535
529
+ #: views/settings/packages.php:70
530
+ msgid "Database"
531
+ msgstr ""
532
+
533
+ #: views/packages/details/detail.php:160
534
+ msgid "Download Links"
535
+ msgstr ""
536
+
537
+ #: views/packages/details/detail.php:163
538
+ msgid "The following links contain sensitive data. Please share with caution!"
539
+ msgstr ""
540
+
541
+ #: views/packages/details/detail.php:169
542
+ msgid "The database SQL script is a quick link to your database backup script. An exact copy is also stored in the package."
543
+ msgstr ""
544
+
545
+ #: views/packages/details/detail.php:177 views/packages/main/s1.setup2.php:92
546
+ #: views/settings/controller.php:25 views/settings/general.php:110
547
+ msgid "Storage"
548
+ msgstr ""
549
+
550
+ #: views/packages/details/detail.php:185 views/packages/details/detail.php:286
551
+ #: views/packages/main/s1.setup2.php:100 views/settings/license.php:12
552
+ msgid "Type"
553
+ msgstr ""
554
+
555
+ #: views/packages/details/detail.php:186 views/packages/main/s1.setup2.php:101
556
+ msgid "Location"
557
+ msgstr ""
558
+
559
+ #: views/packages/details/detail.php:191 views/packages/main/s1.setup2.php:106
560
+ msgid "Default"
561
+ msgstr ""
562
+
563
+ #: views/packages/details/detail.php:192 views/packages/main/s1.setup2.php:107
564
+ msgid "Local"
565
+ msgstr ""
566
+
567
+ #: views/packages/details/detail.php:203 views/packages/main/s1.setup2.php:119
568
+ #, php-format
569
+ msgid "%1$s, %2$s, %3$s, %4$s, %5$s and other storage options available in"
570
+ msgstr ""
571
+
572
+ #: views/packages/details/detail.php:204 views/packages/main/s1.setup2.php:120
573
+ #: views/packages/main/s2.scan3.php:485 views/packages/main/s2.scan3.php:497
574
+ #: views/packages/main/s3.build.php:21
575
+ msgid "Duplicator Pro"
576
+ msgstr ""
577
+
578
+ #: views/packages/details/detail.php:206 views/packages/main/s1.setup2.php:122
579
+ msgid "Additional Storage:"
580
+ msgstr ""
581
+
582
+ #: views/packages/details/detail.php:207 views/packages/main/s1.setup2.php:123
583
+ msgid "Duplicator Pro allows you to create a package and then store it at a custom location on this server or to a cloud based location such as Google Drive, Amazon, Dropbox or FTP."
584
+ msgstr ""
585
+
586
+ #: views/packages/details/detail.php:234 views/packages/details/detail.php:290
587
+ #: views/packages/main/s1.setup2.php:260
588
+ msgid "Build Mode"
589
+ msgstr ""
590
+
591
+ #: views/packages/details/detail.php:241
592
+ msgid "Database Mode"
593
+ msgstr ""
594
+
595
+ #: views/packages/details/detail.php:242
596
+ msgid "Archive Database Only Enabled"
597
+ msgstr ""
598
+
599
+ #: views/packages/details/detail.php:246 views/packages/details/detail.php:303
600
+ msgid "Filters"
601
+ msgstr ""
602
+
603
+ #: views/packages/details/detail.php:250 views/packages/main/s2.scan3.php:564
604
+ #: views/packages/main/s2.scan3.php:629
605
+ msgid "Directories"
606
+ msgstr ""
607
+
608
+ #: views/packages/details/detail.php:254 views/packages/details/detail.php:264
609
+ #: views/packages/details/detail.php:273 views/packages/details/detail.php:312
610
+ msgid "- no filters -"
611
+ msgstr ""
612
+
613
+ #: views/packages/details/detail.php:260 views/packages/main/s2.scan3.php:575
614
+ msgid "Extensions"
615
+ msgstr ""
616
+
617
+ #: views/packages/details/detail.php:283 views/packages/details/detail.php:395
618
+ msgid "DATABASE"
619
+ msgstr ""
620
+
621
+ #: views/packages/details/detail.php:296 views/packages/main/s2.scan3.php:546
622
+ msgid "MySQL Compatibility Mode Enabled"
623
+ msgstr ""
624
+
625
+ #: views/packages/details/detail.php:297 views/packages/main/s1.setup2.php:336
626
+ #: views/packages/main/s2.scan2.php:76 views/packages/main/s2.scan2.php:87
627
+ #: views/packages/main/s2.scan2.php:94 views/packages/main/s2.scan3.php:547
628
+ msgid "details"
629
+ msgstr ""
630
+
631
+ #: views/packages/details/detail.php:307 views/packages/main/s2.scan3.php:393
632
+ msgid "Tables"
633
+ msgstr ""
634
+
635
+ #: views/packages/details/detail.php:332
636
+ msgid " Security"
637
+ msgstr ""
638
+
639
+ #: views/packages/details/detail.php:336
640
+ msgid "Password Protection"
641
+ msgstr ""
642
+
643
+ #: views/packages/details/detail.php:345 views/packages/main/s1.setup2.php:431
644
+ msgid "Show/Hide Password"
645
+ msgstr ""
646
+
647
+ #: views/packages/details/detail.php:355 views/packages/main/s1.setup2.php:457
648
+ msgid " MySQL Server"
649
+ msgstr ""
650
+
651
+ #: views/packages/details/detail.php:358 views/packages/main/s1.setup2.php:460
652
+ msgid "Host"
653
+ msgstr ""
654
+
655
+ #: views/packages/details/detail.php:359 views/packages/details/detail.php:363
656
+ #: views/packages/details/detail.php:367
657
+ msgid "- not set -"
658
+ msgstr ""
659
+
660
+ #: views/packages/details/detail.php:375
661
+ msgid "View Package Object"
662
+ msgstr ""
663
+
664
+ #: views/packages/details/detail.php:392
665
+ msgid "Package File Links"
666
+ msgstr ""
667
+
668
+ #: views/packages/details/detail.php:396
669
+ msgid "PACKAGE"
670
+ msgstr ""
671
+
672
+ #: views/packages/details/detail.php:397
673
+ msgid "INSTALLER"
674
+ msgstr ""
675
+
676
+ #: views/packages/details/detail.php:398
677
+ msgid "LOG"
678
+ msgstr ""
679
+
680
+ #: views/packages/details/transfer.php:15
681
+ msgid "Transfer your packages to multiple locations with Duplicator Pro"
682
+ msgstr ""
683
+
684
+ #: views/packages/details/transfer.php:20 views/settings/storage.php:19
685
+ msgid "Amazon S3"
686
+ msgstr ""
687
+
688
+ #: views/packages/details/transfer.php:21
689
+ msgid "Dropbox"
690
+ msgstr ""
691
+
692
+ #: views/packages/details/transfer.php:22 views/settings/storage.php:21
693
+ msgid "Google Drive"
694
+ msgstr ""
695
+
696
+ #: views/packages/details/transfer.php:23 views/settings/storage.php:22
697
+ msgid "One Drive"
698
+ msgstr ""
699
+
700
+ #: views/packages/details/transfer.php:24 views/settings/storage.php:23
701
+ msgid "FTP &amp; SFTP"
702
+ msgstr ""
703
+
704
+ #: views/packages/details/transfer.php:25 views/settings/storage.php:24
705
+ msgid "Custom Directory"
706
+ msgstr ""
707
+
708
+ #: views/packages/details/transfer.php:29
709
+ msgid "Set up a one-time storage location and automatically push the package to your destination."
710
+ msgstr ""
711
+
712
+ #: views/packages/details/transfer.php:35 views/settings/schedule.php:22
713
+ #: views/settings/storage.php:34 views/tools/templates.php:23
714
+ msgid "Learn More"
715
+ msgstr ""
716
+
717
+ #: views/packages/main/controller.php:9
718
+ msgid "An invalid request was made to this page."
719
+ msgstr ""
720
+
721
+ #: views/packages/main/controller.php:10
722
+ msgid "Please retry by going to the"
723
+ msgstr ""
724
+
725
+ #: views/packages/main/controller.php:11
726
+ msgid "Packages Screen"
727
+ msgstr ""
728
+
729
+ #: views/packages/main/controller.php:59
730
+ msgid "Packages &raquo; All"
731
+ msgstr ""
732
+
733
+ #: views/packages/main/controller.php:63 views/packages/main/controller.php:67
734
+ #: views/packages/main/controller.php:71
735
+ msgid "Packages &raquo; New"
736
+ msgstr ""
737
+
738
+ #: views/packages/main/packages.php:77
739
+ msgid "Bulk Actions"
740
+ msgstr ""
741
+
742
+ #: views/packages/main/packages.php:78
743
+ msgid "Delete selected package(s)"
744
+ msgstr ""
745
+
746
+ #: views/packages/main/packages.php:78
747
+ msgid "Delete"
748
+ msgstr ""
749
+
750
+ #: views/packages/main/packages.php:80
751
+ msgid "Apply"
752
+ msgstr ""
753
+
754
+ #: views/packages/main/packages.php:98 views/packages/main/s1.setup1.php:73
755
+ #: views/packages/main/s2.scan1.php:186 views/packages/main/s3.build.php:101
756
+ msgid "Create New"
757
+ msgstr ""
758
+
759
+ #: views/packages/main/packages.php:114 views/packages/main/packages.php:148
760
+ msgid "No Packages Found."
761
+ msgstr ""
762
+
763
+ #: views/packages/main/packages.php:115 views/packages/main/packages.php:149
764
+ msgid "Click the 'Create New' button to build a package."
765
+ msgstr ""
766
+
767
+ #: views/packages/main/packages.php:117 views/packages/main/packages.php:151
768
+ msgid "New to Duplicator?"
769
+ msgstr ""
770
+
771
+ #: views/packages/main/packages.php:119 views/packages/main/packages.php:153
772
+ msgid "Check out the 'Quick Start' guide!"
773
+ msgstr ""
774
+
775
+ #: views/packages/main/packages.php:135
776
+ msgid "Select all packages"
777
+ msgstr ""
778
+
779
+ #: views/packages/main/packages.php:136
780
+ msgid "Created"
781
+ msgstr ""
782
+
783
+ #: views/packages/main/packages.php:137 views/packages/main/s2.scan3.php:88
784
+ #: views/packages/main/s2.scan3.php:392
785
+ msgid "Size"
786
+ msgstr ""
787
+
788
+ #: views/packages/main/packages.php:140 views/packages/main/s2.scan3.php:528
789
+ msgid "Package"
790
+ msgstr ""
791
+
792
+ #: views/packages/main/packages.php:189
793
+ msgid "Archive created as zip file"
794
+ msgstr ""
795
+
796
+ #: views/packages/main/packages.php:190
797
+ msgid "Archive created as daf file"
798
+ msgstr ""
799
+
800
+ #: views/packages/main/packages.php:195 views/packages/main/s1.setup2.php:148
801
+ #: views/packages/main/s2.scan3.php:35
802
+ msgid "Database Only"
803
+ msgstr ""
804
+
805
+ #: views/packages/main/packages.php:199
806
+ msgid "Package Build Running"
807
+ msgstr ""
808
+
809
+ #: views/packages/main/packages.php:200
810
+ msgid "To stop or reset this package build goto Settings > Advanced > Reset Packages"
811
+ msgstr ""
812
+
813
+ #: views/packages/main/packages.php:210 views/packages/main/packages.php:228
814
+ msgid "Package Details"
815
+ msgstr ""
816
+
817
+ #: views/packages/main/packages.php:226
818
+ msgid "Error Processing"
819
+ msgstr ""
820
+
821
+ #: views/packages/main/packages.php:246
822
+ msgid "Current Server Time"
823
+ msgstr ""
824
+
825
+ #: views/packages/main/packages.php:249 views/packages/main/s3.build.php:321
826
+ msgid "Time"
827
+ msgstr ""
828
+
829
+ #: views/packages/main/packages.php:258
830
+ msgid "Items"
831
+ msgstr ""
832
+
833
+ #: views/packages/main/packages.php:268
834
+ msgid "Bulk Action Required"
835
+ msgstr ""
836
+
837
+ #: views/packages/main/packages.php:270
838
+ msgid "No selections made! Please select an action from the \"Bulk Actions\" drop down menu."
839
+ msgstr ""
840
+
841
+ #: views/packages/main/packages.php:274
842
+ msgid "Selection Required"
843
+ msgstr ""
844
+
845
+ #: views/packages/main/packages.php:276
846
+ msgid "No selections made! Please select at least one package to delete."
847
+ msgstr ""
848
+
849
+ #: views/packages/main/packages.php:280
850
+ msgid "Delete Packages?"
851
+ msgstr ""
852
+
853
+ #: views/packages/main/packages.php:281
854
+ msgid "Are you sure you want to delete the selected package(s)?"
855
+ msgstr ""
856
+
857
+ #: views/packages/main/packages.php:282
858
+ msgid "Removing Packages, Please Wait..."
859
+ msgstr ""
860
+
861
+ #: views/packages/main/packages.php:289
862
+ msgid "Duplicator Help"
863
+ msgstr ""
864
+
865
+ #: views/packages/main/packages.php:294
866
+ msgid "Alert!"
867
+ msgstr ""
868
+
869
+ #: views/packages/main/packages.php:295
870
+ msgid "A package is being processed. Retry later."
871
+ msgstr ""
872
+
873
+ #: views/packages/main/packages.php:302
874
+ msgid "Common Questions:"
875
+ msgstr ""
876
+
877
+ #: views/packages/main/packages.php:303
878
+ msgid "How do I create a package"
879
+ msgstr ""
880
+
881
+ #: views/packages/main/packages.php:304
882
+ msgid "How do I install a package?"
883
+ msgstr ""
884
+
885
+ #: views/packages/main/packages.php:305
886
+ msgid "Frequently Asked Questions!"
887
+ msgstr ""
888
+
889
+ #: views/packages/main/packages.php:308
890
+ msgid "Other Resources:"
891
+ msgstr ""
892
+
893
+ #: views/packages/main/packages.php:309
894
+ msgid "Need help with the plugin?"
895
+ msgstr ""
896
+
897
+ #: views/packages/main/packages.php:310
898
+ msgid "Have an idea for the plugin?"
899
+ msgstr ""
900
+
901
+ #: views/packages/main/packages.php:312
902
+ msgid "Help review the plugin!"
903
+ msgstr ""
904
+
905
+ #: views/packages/main/s1.setup1.php:12
906
+ msgid "Package settings have been reset."
907
+ msgstr ""
908
+
909
+ #: views/packages/main/s1.setup1.php:62 views/packages/main/s1.setup2.php:401
910
+ #: views/packages/main/s2.scan1.php:175 views/packages/main/s2.scan2.php:56
911
+ #: views/packages/main/s3.build.php:79
912
+ msgid "Setup"
913
+ msgstr ""
914
+
915
+ #: views/packages/main/s1.setup1.php:63 views/packages/main/s2.scan1.php:176
916
+ #: views/packages/main/s3.build.php:80
917
+ msgid "Scan"
918
+ msgstr ""
919
+
920
+ #: views/packages/main/s1.setup1.php:64 views/packages/main/s2.scan1.php:177
921
+ #: views/packages/main/s2.scan1.php:269 views/packages/main/s3.build.php:81
922
+ msgid "Build"
923
+ msgstr ""
924
+
925
+ #: views/packages/main/s1.setup1.php:67
926
+ msgid "Step 1: Package Setup"
927
+ msgstr ""
928
+
929
+ #: views/packages/main/s1.setup1.php:90
930
+ msgid "Requirements:"
931
+ msgstr ""
932
+
933
+ #: views/packages/main/s1.setup1.php:99
934
+ msgid "System requirements must pass for the Duplicator to work properly. Click each link for details."
935
+ msgstr ""
936
+
937
+ #: views/packages/main/s1.setup1.php:105
938
+ msgid "PHP Support"
939
+ msgstr ""
940
+
941
+ #: views/packages/main/s1.setup1.php:111 views/packages/main/s2.scan2.php:68
942
+ msgid "PHP Version"
943
+ msgstr ""
944
+
945
+ #: views/packages/main/s1.setup1.php:113
946
+ msgid "PHP versions 5.2.9+ or higher is required."
947
+ msgstr ""
948
+
949
+ #: views/packages/main/s1.setup1.php:117
950
+ msgid "Zip Archive Enabled"
951
+ msgstr ""
952
+
953
+ #: views/packages/main/s1.setup1.php:121
954
+ msgid "ZipArchive extension is required or"
955
+ msgstr ""
956
+
957
+ #: views/packages/main/s1.setup1.php:122
958
+ msgid "Switch to DupArchive"
959
+ msgstr ""
960
+
961
+ #: views/packages/main/s1.setup1.php:123
962
+ msgid "to by-pass this requirement."
963
+ msgstr ""
964
+
965
+ #: views/packages/main/s1.setup1.php:129
966
+ msgid "Safe Mode Off"
967
+ msgstr ""
968
+
969
+ #: views/packages/main/s1.setup1.php:131
970
+ msgid "Safe Mode should be set to Off in you php.ini file and is deprecated as of PHP 5.3.0."
971
+ msgstr ""
972
+
973
+ #: views/packages/main/s1.setup1.php:134 views/packages/main/s1.setup1.php:139
974
+ #: views/packages/main/s1.setup1.php:144
975
+ msgid "Function"
976
+ msgstr ""
977
+
978
+ #: views/packages/main/s1.setup1.php:150
979
+ msgid "For any issues in this section please contact your hosting provider or server administrator. For additional information see our online documentation."
980
+ msgstr ""
981
+
982
+ #: views/packages/main/s1.setup1.php:158
983
+ msgid "Required Paths"
984
+ msgstr ""
985
+
986
+ #: views/packages/main/s1.setup1.php:178
987
+ msgid "If the root WordPress path is not writable by PHP on some systems this can cause issues."
988
+ msgstr ""
989
+
990
+ #: views/packages/main/s1.setup1.php:181
991
+ msgid "If Duplicator does not have enough permissions then you will need to manually create the paths above. &nbsp; "
992
+ msgstr ""
993
+
994
+ #: views/packages/main/s1.setup1.php:190
995
+ msgid "Server Support"
996
+ msgstr ""
997
+
998
+ #: views/packages/main/s1.setup1.php:196
999
+ msgid "MySQL Version"
1000
+ msgstr ""
1001
+
1002
+ #: views/packages/main/s1.setup1.php:200
1003
+ msgid "MySQLi Support"
1004
+ msgstr ""
1005
+
1006
+ #: views/packages/main/s1.setup1.php:206
1007
+ msgid "MySQL version 5.0+ or better is required and the PHP MySQLi extension (note the trailing 'i') is also required. Contact your server administrator and request that mysqli extension and MySQL Server 5.0+ be installed."
1008
+ msgstr ""
1009
+
1010
+ #: views/packages/main/s1.setup1.php:207
1011
+ #: views/tools/diagnostics/inc.data.php:26
1012
+ msgid "more info"
1013
+ msgstr ""
1014
+
1015
+ #: views/packages/main/s1.setup1.php:216
1016
+ msgid "Reserved Files"
1017
+ msgstr ""
1018
+
1019
+ #: views/packages/main/s1.setup1.php:221
1020
+ msgid "None of the reserved files where found from a previous install. This means you are clear to create a new package."
1021
+ msgstr ""
1022
+
1023
+ #: views/packages/main/s1.setup1.php:229
1024
+ msgid "WordPress Root Path:"
1025
+ msgstr ""
1026
+
1027
+ #: views/packages/main/s1.setup1.php:231
1028
+ msgid "Remove Files Now"
1029
+ msgstr ""
1030
+
1031
+ #: views/packages/main/s1.setup2.php:76
1032
+ msgid "Add Notes"
1033
+ msgstr ""
1034
+
1035
+ #: views/packages/main/s1.setup2.php:79
1036
+ msgid "Toggle a default name"
1037
+ msgstr ""
1038
+
1039
+ #: views/packages/main/s1.setup2.php:146
1040
+ msgid "File filter enabled"
1041
+ msgstr ""
1042
+
1043
+ #: views/packages/main/s1.setup2.php:147
1044
+ msgid "Database filter enabled"
1045
+ msgstr ""
1046
+
1047
+ #: views/packages/main/s1.setup2.php:148 views/packages/main/s1.setup2.php:173
1048
+ msgid "Archive Only the Database"
1049
+ msgstr ""
1050
+
1051
+ #: views/packages/main/s1.setup2.php:177
1052
+ msgid "Enable File Filters"
1053
+ msgstr ""
1054
+
1055
+ #: views/packages/main/s1.setup2.php:179
1056
+ msgid "File Filters:"
1057
+ msgstr ""
1058
+
1059
+ #: views/packages/main/s1.setup2.php:180
1060
+ msgid "File filters allow you to ignore directories and file extensions. When creating a package only include the data you want and need. This helps to improve the overall archive build time and keep your backups simple and clean."
1061
+ msgstr ""
1062
+
1063
+ #: views/packages/main/s1.setup2.php:185 views/packages/main/s1.setup2.php:199
1064
+ #: views/packages/main/s1.setup2.php:207
1065
+ msgid "Separate all filters by semicolon"
1066
+ msgstr ""
1067
+
1068
+ #: views/packages/main/s1.setup2.php:187
1069
+ msgid "Directories:"
1070
+ msgstr ""
1071
+
1072
+ #: views/packages/main/s1.setup2.php:188
1073
+ msgid "Number of directories filtered"
1074
+ msgstr ""
1075
+
1076
+ #: views/packages/main/s1.setup2.php:192
1077
+ msgid "root path"
1078
+ msgstr ""
1079
+
1080
+ #: views/packages/main/s1.setup2.php:193
1081
+ msgid "wp-uploads"
1082
+ msgstr ""
1083
+
1084
+ #: views/packages/main/s1.setup2.php:194
1085
+ msgid "cache"
1086
+ msgstr ""
1087
+
1088
+ #: views/packages/main/s1.setup2.php:195 views/packages/main/s1.setup2.php:203
1089
+ #: views/packages/main/s1.setup2.php:215
1090
+ msgid "(clear)"
1091
+ msgstr ""
1092
+
1093
+ #: views/packages/main/s1.setup2.php:199
1094
+ msgid "File extensions"
1095
+ msgstr ""
1096
+
1097
+ #: views/packages/main/s1.setup2.php:201
1098
+ msgid "media"
1099
+ msgstr ""
1100
+
1101
+ #: views/packages/main/s1.setup2.php:202
1102
+ msgid "archive"
1103
+ msgstr ""
1104
+
1105
+ #: views/packages/main/s1.setup2.php:209
1106
+ msgid "Files:"
1107
+ msgstr ""
1108
+
1109
+ #: views/packages/main/s1.setup2.php:210
1110
+ msgid "Number of files filtered"
1111
+ msgstr ""
1112
+
1113
+ #: views/packages/main/s1.setup2.php:214
1114
+ msgid "(file path)"
1115
+ msgstr ""
1116
+
1117
+ #: views/packages/main/s1.setup2.php:220
1118
+ msgid "The directory, file and extensions paths above will be excluded from the archive file if enabled is checked."
1119
+ msgstr ""
1120
+
1121
+ #: views/packages/main/s1.setup2.php:221
1122
+ msgid "Use the full path for directories and files with semicolons to separate all paths."
1123
+ msgstr ""
1124
+
1125
+ #: views/packages/main/s1.setup2.php:231
1126
+ msgid "This option has automatically been checked because you have opted for a <i class='fa fa-random'></i> Two-Part Install Process. Please complete the package build and continue with the "
1127
+ msgstr ""
1128
+
1129
+ #: views/packages/main/s1.setup2.php:234 views/packages/main/s3.build.php:279
1130
+ msgid "Quick Start Two-Part Install Instructions"
1131
+ msgstr ""
1132
+
1133
+ #: views/packages/main/s1.setup2.php:238
1134
+ msgid "<b>Overview:</b><br/> This advanced option excludes all files from the archive. Only the database and a copy of the installer.php will be included in the archive.zip file. The option can be used for backing up and moving only the database."
1135
+ msgstr ""
1136
+
1137
+ #: views/packages/main/s1.setup2.php:243
1138
+ msgid "<b><i class='fa fa-exclamation-circle'></i> Notice:</b><br/>"
1139
+ msgstr ""
1140
+
1141
+ #: views/packages/main/s1.setup2.php:245
1142
+ msgid "Please use caution when installing only the database over an existing site and be sure the correct files correspond with the database. For example, if WordPress 4.6 is on this site and you copy the database to a host that has WordPress 4.8 files then the source code of the files will not be in sync with the database causing possible errors. If you’re immediately moving the source files with the database then you can ignore this notice. Please use this advanced feature with caution!"
1143
+ msgstr ""
1144
+
1145
+ #: views/packages/main/s1.setup2.php:267
1146
+ msgid "Enable Table Filters"
1147
+ msgstr ""
1148
+
1149
+ #: views/packages/main/s1.setup2.php:269
1150
+ msgid "Enable Table Filters:"
1151
+ msgstr ""
1152
+
1153
+ #: views/packages/main/s1.setup2.php:270
1154
+ msgid "Checked tables will not be added to the database script. Excluding certain tables can possibly cause your site or plugins to not work correctly after install!"
1155
+ msgstr ""
1156
+
1157
+ #: views/packages/main/s1.setup2.php:276
1158
+ msgid "Include All"
1159
+ msgstr ""
1160
+
1161
+ #: views/packages/main/s1.setup2.php:277
1162
+ msgid "Exclude All"
1163
+ msgstr ""
1164
+
1165
+ #: views/packages/main/s1.setup2.php:321
1166
+ msgid "Checked tables will be <u>excluded</u> from the database script. "
1167
+ msgstr ""
1168
+
1169
+ #: views/packages/main/s1.setup2.php:322
1170
+ msgid "Excluding certain tables can cause your site or plugins to not work correctly after install!<br/>"
1171
+ msgstr ""
1172
+
1173
+ #: views/packages/main/s1.setup2.php:323
1174
+ msgid "<i class='core-table-info'> Use caution when excluding tables! It is highly recommended to not exclude WordPress core tables*, unless you know the impact.</i>"
1175
+ msgstr ""
1176
+
1177
+ #: views/packages/main/s1.setup2.php:328
1178
+ msgid "Compatibility Mode"
1179
+ msgstr ""
1180
+
1181
+ #: views/packages/main/s1.setup2.php:330
1182
+ msgid "Compatibility Mode:"
1183
+ msgstr ""
1184
+
1185
+ #: views/packages/main/s1.setup2.php:331
1186
+ msgid "This is an advanced database backwards compatibility feature that should ONLY be used if having problems installing packages. If the database server version is lower than the version where the package was built then these options may help generate a script that is more compliant with the older database server. It is recommended to try each option separately starting with mysql40."
1187
+ msgstr ""
1188
+
1189
+ #: views/packages/main/s1.setup2.php:352
1190
+ msgid "mysql40"
1191
+ msgstr ""
1192
+
1193
+ #: views/packages/main/s1.setup2.php:356
1194
+ msgid "no_table_options"
1195
+ msgstr ""
1196
+
1197
+ #: views/packages/main/s1.setup2.php:360
1198
+ msgid "no_key_options"
1199
+ msgstr ""
1200
+
1201
+ #: views/packages/main/s1.setup2.php:364
1202
+ msgid "no_field_options"
1203
+ msgstr ""
1204
+
1205
+ #: views/packages/main/s1.setup2.php:369
1206
+ msgid "This option is only available with mysqldump mode."
1207
+ msgstr ""
1208
+
1209
+ #: views/packages/main/s1.setup2.php:382
1210
+ msgid "Installer password protection is on"
1211
+ msgstr ""
1212
+
1213
+ #: views/packages/main/s1.setup2.php:383
1214
+ msgid "Installer password protection is off"
1215
+ msgstr ""
1216
+
1217
+ #: views/packages/main/s1.setup2.php:390
1218
+ msgid "All values in this section are"
1219
+ msgstr ""
1220
+
1221
+ #: views/packages/main/s1.setup2.php:390
1222
+ msgid "optional"
1223
+ msgstr ""
1224
+
1225
+ #: views/packages/main/s1.setup2.php:392
1226
+ msgid "Setup/Prefills"
1227
+ msgstr ""
1228
+
1229
+ #: views/packages/main/s1.setup2.php:393
1230
+ msgid "All values in this section are OPTIONAL! If you know ahead of time the database input fields the installer will use, then you can optionally enter them here and they will be prefilled at install time. Otherwise you can just enter them in at install time and ignore all these options in the Installer section."
1231
+ msgstr ""
1232
+
1233
+ #: views/packages/main/s1.setup2.php:404 views/packages/main/s1.setup2.php:409
1234
+ msgid "Branding"
1235
+ msgstr ""
1236
+
1237
+ #: views/packages/main/s1.setup2.php:407
1238
+ msgid "Available with Duplicator Pro - Freelancer!"
1239
+ msgstr ""
1240
+
1241
+ #: views/packages/main/s1.setup2.php:410
1242
+ msgid "Branding is a way to customize the installer look and feel. With branding you can create multiple brands of installers."
1243
+ msgstr ""
1244
+
1245
+ #: views/packages/main/s1.setup2.php:415
1246
+ msgid "Security"
1247
+ msgstr ""
1248
+
1249
+ #: views/packages/main/s1.setup2.php:422
1250
+ msgid "Enable Password Protection"
1251
+ msgstr ""
1252
+
1253
+ #: views/packages/main/s1.setup2.php:424
1254
+ msgid "Security:"
1255
+ msgstr ""
1256
+
1257
+ #: views/packages/main/s1.setup2.php:425
1258
+ msgid "Enabling this option will allow for basic password protection on the installer. Before running the installer the password below must be entered before proceeding with an install. This password is a general deterrent and should not be substituted for properly keeping your files secure. Be sure to remove all installer files when the install process is completed."
1259
+ msgstr ""
1260
+
1261
+ #: views/packages/main/s1.setup2.php:440
1262
+ msgid "Prefills"
1263
+ msgstr ""
1264
+
1265
+ #: views/packages/main/s1.setup2.php:448
1266
+ msgid "Basic"
1267
+ msgstr ""
1268
+
1269
+ #: views/packages/main/s1.setup2.php:449 views/settings/gopro.php:176
1270
+ msgid "cPanel"
1271
+ msgstr ""
1272
+
1273
+ #: views/packages/main/s1.setup2.php:461
1274
+ msgid "example: localhost (value is optional)"
1275
+ msgstr ""
1276
+
1277
+ #: views/packages/main/s1.setup2.php:464
1278
+ msgid "Host Port"
1279
+ msgstr ""
1280
+
1281
+ #: views/packages/main/s1.setup2.php:465
1282
+ msgid "example: 3306 (value is optional)"
1283
+ msgstr ""
1284
+
1285
+ #: views/packages/main/s1.setup2.php:469
1286
+ msgid "example: DatabaseName (value is optional)"
1287
+ msgstr ""
1288
+
1289
+ #: views/packages/main/s1.setup2.php:473
1290
+ msgid "example: DatabaseUserName (value is optional)"
1291
+ msgstr ""
1292
+
1293
+ #: views/packages/main/s1.setup2.php:483
1294
+ msgid "Create the database and database user at install time without leaving the installer!"
1295
+ msgstr ""
1296
+
1297
+ #: views/packages/main/s1.setup2.php:484
1298
+ msgid "This feature is only availble in "
1299
+ msgstr ""
1300
+
1301
+ #: views/packages/main/s1.setup2.php:485
1302
+ msgid "Duplicator Pro!"
1303
+ msgstr ""
1304
+
1305
+ #: views/packages/main/s1.setup2.php:486
1306
+ msgid "This feature works only with hosts that support cPanel."
1307
+ msgstr ""
1308
+
1309
+ #: views/packages/main/s1.setup2.php:498
1310
+ msgid "Reset"
1311
+ msgstr ""
1312
+
1313
+ #: views/packages/main/s1.setup2.php:499
1314
+ msgid "Next"
1315
+ msgstr ""
1316
+
1317
+ #: views/packages/main/s1.setup2.php:508
1318
+ msgid "Reset Package Settings?"
1319
+ msgstr ""
1320
+
1321
+ #: views/packages/main/s1.setup2.php:509
1322
+ msgid "This will clear and reset all of the current package settings. Would you like to continue?"
1323
+ msgstr ""
1324
+
1325
+ #: views/packages/main/s2.scan1.php:148
1326
+ msgid "Input fields not valid"
1327
+ msgstr ""
1328
+
1329
+ #: views/packages/main/s2.scan1.php:149 views/packages/main/s2.scan1.php:207
1330
+ msgid "Please try again!"
1331
+ msgstr ""
1332
+
1333
+ #: views/packages/main/s2.scan1.php:151 views/packages/main/s2.scan1.php:212
1334
+ #: views/packages/main/s3.build.php:353
1335
+ msgid "Error Message:"
1336
+ msgstr ""
1337
+
1338
+ #: views/packages/main/s2.scan1.php:161 views/packages/main/s2.scan1.php:267
1339
+ msgid "Back"
1340
+ msgstr ""
1341
+
1342
+ #: views/packages/main/s2.scan1.php:180
1343
+ msgid "Step 2: System Scan"
1344
+ msgstr ""
1345
+
1346
+ #: views/packages/main/s2.scan1.php:197
1347
+ msgid "Scanning Site"
1348
+ msgstr ""
1349
+
1350
+ #: views/packages/main/s2.scan1.php:199 views/packages/main/s3.build.php:116
1351
+ msgid "Please Wait..."
1352
+ msgstr ""
1353
+
1354
+ #: views/packages/main/s2.scan1.php:200
1355
+ msgid "Keep this window open during the scan process."
1356
+ msgstr ""
1357
+
1358
+ #: views/packages/main/s2.scan1.php:201
1359
+ msgid "This can take several minutes."
1360
+ msgstr ""
1361
+
1362
+ #: views/packages/main/s2.scan1.php:206
1363
+ msgid "Scan Error"
1364
+ msgstr ""
1365
+
1366
+ #: views/packages/main/s2.scan1.php:209 views/packages/main/s3.build.php:349
1367
+ msgid "Server Status:"
1368
+ msgstr ""
1369
+
1370
+ #: views/packages/main/s2.scan1.php:221
1371
+ msgid "Scan Complete"
1372
+ msgstr ""
1373
+
1374
+ #: views/packages/main/s2.scan1.php:223
1375
+ msgid "Process Time:"
1376
+ msgstr ""
1377
+
1378
+ #: views/packages/main/s2.scan1.php:239
1379
+ msgid "A notice status has been detected, are you sure you want to continue?"
1380
+ msgstr ""
1381
+
1382
+ #: views/packages/main/s2.scan1.php:243
1383
+ msgid "Yes. Continue with the build process!"
1384
+ msgstr ""
1385
+
1386
+ #: views/packages/main/s2.scan1.php:249
1387
+ msgid "Scan checks are not required to pass, however they could cause issues on some systems."
1388
+ msgstr ""
1389
+
1390
+ #: views/packages/main/s2.scan1.php:251
1391
+ msgid "Please review the details for each section by clicking on the detail title."
1392
+ msgstr ""
1393
+
1394
+ #: views/packages/main/s2.scan1.php:258
1395
+ msgid "Do you want to continue?"
1396
+ msgstr ""
1397
+
1398
+ #: views/packages/main/s2.scan1.php:260
1399
+ msgid "At least one or more checkboxes was checked in \"Quick Filters\"."
1400
+ msgstr ""
1401
+
1402
+ #: views/packages/main/s2.scan1.php:261
1403
+ msgid "To apply a \"Quick Filter\" click the \"Add Filters & Rescan\" button"
1404
+ msgstr ""
1405
+
1406
+ #: views/packages/main/s2.scan1.php:263
1407
+ msgid "Yes. Continue without applying any file filters."
1408
+ msgstr ""
1409
+
1410
+ #: views/packages/main/s2.scan1.php:268
1411
+ msgid "Rescan"
1412
+ msgstr ""
1413
+
1414
+ #: views/packages/main/s2.scan1.php:414
1415
+ msgid "Unable to perform a full scan, please try the following actions:"
1416
+ msgstr ""
1417
+
1418
+ #: views/packages/main/s2.scan1.php:415
1419
+ msgid "1. Go back and create a root path directory filter to validate the site is scan-able."
1420
+ msgstr ""
1421
+
1422
+ #: views/packages/main/s2.scan1.php:416
1423
+ msgid "2. Continue to add/remove filters to isolate which path is causing issues."
1424
+ msgstr ""
1425
+
1426
+ #: views/packages/main/s2.scan1.php:417
1427
+ msgid "3. This message will go away once the correct filters are applied."
1428
+ msgstr ""
1429
+
1430
+ #: views/packages/main/s2.scan1.php:419
1431
+ msgid "Common Issues:"
1432
+ msgstr ""
1433
+
1434
+ #: views/packages/main/s2.scan1.php:420
1435
+ msgid "- On some budget hosts scanning over 30k files can lead to timeout/gateway issues. Consider scanning only your main WordPress site and avoid trying to backup other external directories."
1436
+ msgstr ""
1437
+
1438
+ #: views/packages/main/s2.scan1.php:421
1439
+ msgid "- Symbolic link recursion can cause timeouts. Ask your server admin if any are present in the scan path. If they are add the full path as a filter and try running the scan again."
1440
+ msgstr ""
1441
+
1442
+ #: views/packages/main/s2.scan1.php:434 views/packages/main/s2.scan3.php:57
1443
+ #: views/packages/main/s2.scan3.php:68 views/packages/main/s3.build.php:245
1444
+ msgid "Notice"
1445
+ msgstr ""
1446
+
1447
+ #: views/packages/main/s2.scan1.php:436
1448
+ msgid "Good"
1449
+ msgstr ""
1450
+
1451
+ #: views/packages/main/s2.scan1.php:437
1452
+ msgid "Fail"
1453
+ msgstr ""
1454
+
1455
+ #: views/packages/main/s2.scan2.php:7
1456
+ msgid "Server"
1457
+ msgstr ""
1458
+
1459
+ #: views/packages/main/s2.scan2.php:8
1460
+ msgid "Show Diagnostics"
1461
+ msgstr ""
1462
+
1463
+ #: views/packages/main/s2.scan2.php:63
1464
+ #: views/tools/diagnostics/inc.settings.php:51
1465
+ msgid "Web Server"
1466
+ msgstr ""
1467
+
1468
+ #: views/packages/main/s2.scan2.php:64
1469
+ msgid "Supported web servers: "
1470
+ msgstr ""
1471
+
1472
+ #: views/packages/main/s2.scan2.php:69
1473
+ msgid "The minimum PHP version supported by Duplicator is 5.2.9. It is highly recommended to use PHP 5.3+ for improved stability. For international language support please use PHP 7.0+."
1474
+ msgstr ""
1475
+
1476
+ #: views/packages/main/s2.scan2.php:74
1477
+ msgid "PHP Open Base Dir"
1478
+ msgstr ""
1479
+
1480
+ #: views/packages/main/s2.scan2.php:75
1481
+ msgid "Issues might occur when [open_basedir] is enabled. Work with your server admin to disable this value in the php.ini file if you’re having issues building a package."
1482
+ msgstr ""
1483
+
1484
+ #: views/packages/main/s2.scan2.php:80 views/packages/main/s3.build.php:328
1485
+ msgid "PHP Max Execution Time"
1486
+ msgstr ""
1487
+
1488
+ #: views/packages/main/s2.scan2.php:81
1489
+ msgid "Timeouts may occur for larger packages when [max_execution_time] time in the php.ini is too low. A value of 0 (recommended) indicates that PHP has no time limits. An attempt is made to override this value if the server allows it."
1490
+ msgstr ""
1491
+
1492
+ #: views/packages/main/s2.scan2.php:84
1493
+ msgid "Note: Timeouts can also be set at the web server layer, so if the PHP max timeout passes and you still see a build timeout messages, then your web server could be killing the process. If you are on a budget host and limited on processing time, consider using the database or file filters to shrink the size of your overall package. However use caution as excluding the wrong resources can cause your install to not work properly."
1494
+ msgstr ""
1495
+
1496
+ #: views/packages/main/s2.scan2.php:92
1497
+ msgid "Get faster builds with Duplicator Pro with access to shell_exec zip."
1498
+ msgstr ""
1499
+
1500
+ #: views/packages/main/s2.scan2.php:112
1501
+ msgid "WordPress Version"
1502
+ msgstr ""
1503
+
1504
+ #: views/packages/main/s2.scan2.php:113
1505
+ #, php-format
1506
+ msgid "It is recommended to have a version of WordPress that is greater than %1$s. Older version of WordPress can lead to migration issues and are a security risk. If possible please update your WordPress site to the latest version."
1507
+ msgstr ""
1508
+
1509
+ #: views/packages/main/s2.scan2.php:117
1510
+ msgid "Core Files"
1511
+ msgstr ""
1512
+
1513
+ #: views/packages/main/s2.scan2.php:123
1514
+ msgid "The core WordPress paths below will <u>not</u> be included in the archive. These paths are required for WordPress to function!"
1515
+ msgstr ""
1516
+
1517
+ #: views/packages/main/s2.scan2.php:134
1518
+ msgid "The core WordPress file below will <u>not</u> be included in the archive. This file is required for WordPress to function!"
1519
+ msgstr ""
1520
+
1521
+ #: views/packages/main/s2.scan2.php:147
1522
+ msgid " to the new location for the site to function properly."
1523
+ msgstr ""
1524
+
1525
+ #: views/packages/main/s2.scan2.php:153
1526
+ msgid "If the scanner is unable to locate the wp-config.php file in the root directory, then you will need to manually copy it to its new location. This check will also look for core WordPress paths that should be included in the archive for WordPress to work correctly."
1527
+ msgstr ""
1528
+
1529
+ #: views/packages/main/s2.scan2.php:172
1530
+ msgid "Multisite: Unsupported"
1531
+ msgstr ""
1532
+
1533
+ #: views/packages/main/s2.scan2.php:173
1534
+ msgid "Duplicator does not support WordPress multisite migrations. We recommend using Duplicator Pro which currently supports full multisite migrations and subsite to standalone site migrations."
1535
+ msgstr ""
1536
+
1537
+ #: views/packages/main/s2.scan2.php:177
1538
+ msgid "While it is not recommended you can still continue with the build of this package. Please note that at install time additional manual custom configurations will need to be made to finalize this multisite migration."
1539
+ msgstr ""
1540
+
1541
+ #: views/packages/main/s2.scan2.php:179 views/packages/main/s2.scan2.php:184
1542
+ msgid "upgrade to pro"
1543
+ msgstr ""
1544
+
1545
+ #: views/packages/main/s2.scan2.php:181
1546
+ msgid "Multisite: N/A"
1547
+ msgstr ""
1548
+
1549
+ #: views/packages/main/s2.scan2.php:182
1550
+ msgid "This is not a multisite install so duplication will proceed without issue. Duplicator does not officially support multisite. However, Duplicator Pro supports duplication of a full multisite network and also has the ability to install a multisite subsite as a standalone site."
1551
+ msgstr ""
1552
+
1553
+ #: views/packages/main/s2.scan3.php:6
1554
+ #: views/tools/diagnostics/inc.settings.php:55
1555
+ msgid "Root Path"
1556
+ msgstr ""
1557
+
1558
+ #: views/packages/main/s2.scan3.php:23
1559
+ msgid "Show Scan Details"
1560
+ msgstr ""
1561
+
1562
+ #: views/packages/main/s2.scan3.php:38 views/packages/main/s2.scan3.php:370
1563
+ #: views/packages/main/s2.scan3.php:557 views/settings/general.php:158
1564
+ #: views/tools/diagnostics/inc.settings.php:167
1565
+ msgid "Enabled"
1566
+ msgstr ""
1567
+
1568
+ #: views/packages/main/s2.scan3.php:44
1569
+ msgid "Archive Size"
1570
+ msgstr ""
1571
+
1572
+ #: views/packages/main/s2.scan3.php:45
1573
+ msgid "This size includes only files BEFORE compression is applied. It does not include the size of the database script or any applied filters. Once complete the package size will be smaller than this number."
1574
+ msgstr ""
1575
+
1576
+ #: views/packages/main/s2.scan3.php:48 views/packages/main/s2.scan3.php:380
1577
+ #: views/packages/main/s2.scan3.php:442
1578
+ msgid "uncompressed"
1579
+ msgstr ""
1580
+
1581
+ #: views/packages/main/s2.scan3.php:56
1582
+ msgid "Database only"
1583
+ msgstr ""
1584
+
1585
+ #: views/packages/main/s2.scan3.php:60
1586
+ msgid "Only the database and a copy of the installer.php will be included in the archive.zip file."
1587
+ msgstr ""
1588
+
1589
+ #: views/packages/main/s2.scan3.php:67
1590
+ msgid "Skip archive scan enabled"
1591
+ msgstr ""
1592
+
1593
+ #: views/packages/main/s2.scan3.php:71
1594
+ msgid "All file checks are skipped. This could cause problems during extraction if problematic files are included."
1595
+ msgstr ""
1596
+
1597
+ #: views/packages/main/s2.scan3.php:73
1598
+ msgid " Disable the advanced option to re-enable file controls."
1599
+ msgstr ""
1600
+
1601
+ #: views/packages/main/s2.scan3.php:84
1602
+ msgid "Size Checks"
1603
+ msgstr ""
1604
+
1605
+ #: views/packages/main/s2.scan3.php:89
1606
+ msgid "File Count"
1607
+ msgstr ""
1608
+
1609
+ #: views/packages/main/s2.scan3.php:90
1610
+ msgid "Directory Count"
1611
+ msgstr ""
1612
+
1613
+ #: views/packages/main/s2.scan3.php:92
1614
+ msgid "Compressing larger sites on <i>some budget hosts</i> may cause timeouts. "
1615
+ msgstr ""
1616
+
1617
+ #: views/packages/main/s2.scan3.php:93
1618
+ msgid "more details..."
1619
+ msgstr ""
1620
+
1621
+ #: views/packages/main/s2.scan3.php:97 views/packages/main/s2.scan3.php:387
1622
+ #: views/packages/main/s3.build.php:203 views/packages/screen.php:53
1623
+ msgid "Overview"
1624
+ msgstr ""
1625
+
1626
+ #: views/packages/main/s2.scan3.php:99
1627
+ #, php-format
1628
+ msgid "This notice is triggered at [%s] and can be ignored on most hosts. If during the build process you see a \"Host Build Interrupt\" message then this host has strict processing limits. Below are some options you can take to overcome constraints set up on this host."
1629
+ msgstr ""
1630
+
1631
+ #: views/packages/main/s2.scan3.php:103
1632
+ msgid "Timeout Options"
1633
+ msgstr ""
1634
+
1635
+ #: views/packages/main/s2.scan3.php:105
1636
+ msgid "Apply the \"Quick Filters\" below or click the back button to apply on previous page."
1637
+ msgstr ""
1638
+
1639
+ #: views/packages/main/s2.scan3.php:106
1640
+ msgid "See the FAQ link to adjust this hosts timeout limits: "
1641
+ msgstr ""
1642
+
1643
+ #: views/packages/main/s2.scan3.php:106
1644
+ msgid "What can I try for Timeout Issues?"
1645
+ msgstr ""
1646
+
1647
+ #: views/packages/main/s2.scan3.php:107
1648
+ msgid "Consider trying multi-threaded support in "
1649
+ msgstr ""
1650
+
1651
+ #: views/packages/main/s2.scan3.php:108
1652
+ msgid "Duplicator Pro."
1653
+ msgstr ""
1654
+
1655
+ #: views/packages/main/s2.scan3.php:112
1656
+ #, php-format
1657
+ msgid "Files over %1$s are listed below. Larger files such as movies or zipped content can cause timeout issues on some budget hosts. If you are having issues creating a package try excluding the directory paths below or go back to Step 1 and add them."
1658
+ msgstr ""
1659
+
1660
+ #: views/packages/main/s2.scan3.php:121 views/packages/main/s2.scan3.php:208
1661
+ #: views/packages/main/s2.scan3.php:257
1662
+ msgid "Quick Filters"
1663
+ msgstr ""
1664
+
1665
+ #: views/packages/main/s2.scan3.php:122
1666
+ msgid "Large Files"
1667
+ msgstr ""
1668
+
1669
+ #: views/packages/main/s2.scan3.php:125 views/packages/main/s2.scan3.php:260
1670
+ msgid "Hide All"
1671
+ msgstr ""
1672
+
1673
+ #: views/packages/main/s2.scan3.php:126 views/packages/main/s2.scan3.php:261
1674
+ msgid "Show All"
1675
+ msgstr ""
1676
+
1677
+ #: views/packages/main/s2.scan3.php:136 views/packages/main/s2.scan3.php:276
1678
+ msgid "Core WordPress directories should not be filtered. Use caution when excluding files."
1679
+ msgstr ""
1680
+
1681
+ #: views/packages/main/s2.scan3.php:156
1682
+ msgid "No large files found during this scan."
1683
+ msgstr ""
1684
+
1685
+ #: views/packages/main/s2.scan3.php:159
1686
+ msgid "No large files found during this scan. If you're having issues building a package click the back button and try adding a file filter to non-essential files paths like wp-content/uploads. These excluded files can then be manually moved to the new location after you have ran the migration installer."
1687
+ msgstr ""
1688
+
1689
+ #: views/packages/main/s2.scan3.php:172 views/packages/main/s2.scan3.php:302
1690
+ msgid "*Checking a directory will exclude all items recursively from that path down. Please use caution when filtering directories."
1691
+ msgstr ""
1692
+
1693
+ #: views/packages/main/s2.scan3.php:175 views/packages/main/s2.scan3.php:231
1694
+ #: views/packages/main/s2.scan3.php:305
1695
+ msgid "Add Filters &amp; Rescan"
1696
+ msgstr ""
1697
+
1698
+ #: views/packages/main/s2.scan3.php:177 views/packages/main/s2.scan3.php:307
1699
+ msgid "Copy Paths to Clipboard"
1700
+ msgstr ""
1701
+
1702
+ #: views/packages/main/s2.scan3.php:193
1703
+ msgid "Addon Sites"
1704
+ msgstr ""
1705
+
1706
+ #: views/packages/main/s2.scan3.php:199
1707
+ msgid "An \"Addon Site\" is a separate WordPress site(s) residing in subdirectories within this site. If you confirm these to be separate sites, then it is recommended that you exclude them by checking the corresponding boxes below and clicking the 'Add Filters & Rescan' button. To backup the other sites install the plugin on the sites needing to be backed-up."
1708
+ msgstr ""
1709
+
1710
+ #: views/packages/main/s2.scan3.php:222
1711
+ msgid "No add on sites found."
1712
+ msgstr ""
1713
+
1714
+ #: views/packages/main/s2.scan3.php:228
1715
+ msgid "*Checking a directory will exclude all items in that path recursively."
1716
+ msgstr ""
1717
+
1718
+ #: views/packages/main/s2.scan3.php:244 views/packages/main/s2.scan3.php:258
1719
+ msgid "Name Checks"
1720
+ msgstr ""
1721
+
1722
+ #: views/packages/main/s2.scan3.php:249
1723
+ msgid "Unicode and special characters such as \"*?><:/\\|\", can be problematic on some hosts."
1724
+ msgstr ""
1725
+
1726
+ #: views/packages/main/s2.scan3.php:250
1727
+ msgid " Only consider using this filter if the package build is failing. Select files that are not important to your site or you can migrate manually."
1728
+ msgstr ""
1729
+
1730
+ #: views/packages/main/s2.scan3.php:251
1731
+ msgid "If this environment/system and the system where it will be installed are set up to support Unicode and long paths then these filters can be ignored. If you run into issues with creating or installing a package, then is recommended to filter these paths."
1732
+ msgstr ""
1733
+
1734
+ #: views/packages/main/s2.scan3.php:296
1735
+ msgid "No file/directory name warnings found."
1736
+ msgstr ""
1737
+
1738
+ #: views/packages/main/s2.scan3.php:319
1739
+ msgid "Read Checks"
1740
+ msgstr ""
1741
+
1742
+ #: views/packages/main/s2.scan3.php:324
1743
+ msgid "PHP is unable to read the following items and they will NOT be included in the package. Please work with your host to adjust the permissions or resolve the symbolic-link(s) shown in the lists below. If these items are not needed then this notice can be ignored."
1744
+ msgstr ""
1745
+
1746
+ #: views/packages/main/s2.scan3.php:330
1747
+ msgid "Unreadable Items:"
1748
+ msgstr ""
1749
+
1750
+ #: views/packages/main/s2.scan3.php:337
1751
+ msgid "No unreadable items found."
1752
+ msgstr ""
1753
+
1754
+ #: views/packages/main/s2.scan3.php:341
1755
+ msgid "Recursive Links:"
1756
+ msgstr ""
1757
+
1758
+ #: views/packages/main/s2.scan3.php:348
1759
+ msgid "No recursive sym-links found."
1760
+ msgstr ""
1761
+
1762
+ #: views/packages/main/s2.scan3.php:376
1763
+ msgid "Database Size:"
1764
+ msgstr ""
1765
+
1766
+ #: views/packages/main/s2.scan3.php:377
1767
+ msgid "The database size represents only the included tables. The process for gathering the size uses the query SHOW TABLE STATUS. The overall size of the database file can impact the final size of the package."
1768
+ msgstr ""
1769
+
1770
+ #: views/packages/main/s2.scan3.php:391
1771
+ msgid "TOTAL SIZE"
1772
+ msgstr ""
1773
+
1774
+ #: views/packages/main/s2.scan3.php:394
1775
+ msgid "Records"
1776
+ msgstr ""
1777
+
1778
+ #: views/packages/main/s2.scan3.php:397
1779
+ #, php-format
1780
+ msgid "Total size and row counts are approximate values. The thresholds that trigger notices are %1$s records total for the entire database. Larger databases take more time to process. On some budget hosts that have cpu/memory/timeout limits this may cause issues."
1781
+ msgstr ""
1782
+
1783
+ #: views/packages/main/s2.scan3.php:402
1784
+ msgid "TABLE DETAILS:"
1785
+ msgstr ""
1786
+
1787
+ #: views/packages/main/s2.scan3.php:404
1788
+ #, php-format
1789
+ msgid "The notices for tables are %1$s records or names with upper-case characters. Individual tables will not trigger a notice message, but can help narrow down issues if they occur later on."
1790
+ msgstr ""
1791
+
1792
+ #: views/packages/main/s2.scan3.php:411 views/packages/main/s2.scan3.php:463
1793
+ msgid "RECOMMENDATIONS:"
1794
+ msgstr ""
1795
+
1796
+ #: views/packages/main/s2.scan3.php:414
1797
+ msgid "repair and optimization"
1798
+ msgstr ""
1799
+
1800
+ #: views/packages/main/s2.scan3.php:415
1801
+ #, php-format
1802
+ msgid "1. Run a %1$s on the table to improve the overall size and performance."
1803
+ msgstr ""
1804
+
1805
+ #: views/packages/main/s2.scan3.php:417
1806
+ msgid "2. Remove post revisions and stale data from tables. Tables such as logs, statistical or other non-critical data should be cleared."
1807
+ msgstr ""
1808
+
1809
+ #: views/packages/main/s2.scan3.php:419
1810
+ msgid "Enable mysqldump"
1811
+ msgstr ""
1812
+
1813
+ #: views/packages/main/s2.scan3.php:420
1814
+ #, php-format
1815
+ msgid "3. %1$s if this host supports the option."
1816
+ msgstr ""
1817
+
1818
+ #: views/packages/main/s2.scan3.php:422
1819
+ msgid "lower_case_table_names"
1820
+ msgstr ""
1821
+
1822
+ #: views/packages/main/s2.scan3.php:423
1823
+ #, php-format
1824
+ msgid "4. For table name case sensitivity issues either rename the table with lower case characters or be prepared to work with the %1$s system variable setting."
1825
+ msgstr ""
1826
+
1827
+ #: views/packages/main/s2.scan3.php:434
1828
+ msgid "Total Size"
1829
+ msgstr ""
1830
+
1831
+ #: views/packages/main/s2.scan3.php:439
1832
+ msgid "Total Size:"
1833
+ msgstr ""
1834
+
1835
+ #: views/packages/main/s2.scan3.php:440
1836
+ msgid "The total size of the site (files plus database)."
1837
+ msgstr ""
1838
+
1839
+ #: views/packages/main/s2.scan3.php:450
1840
+ #, php-format
1841
+ msgid "The build can't continue because the total size of files and the database exceeds the %s limit that can be processed when creating a DupArchive package. "
1842
+ msgstr ""
1843
+
1844
+ #: views/packages/main/s2.scan3.php:451
1845
+ msgid "<a href=\"javascript:void(0)\" onclick=\"jQuery('#data-ll-status-recommendations').toggle()\">Click for recommendations.</a>"
1846
+ msgstr ""
1847
+
1848
+ #: views/packages/main/s2.scan3.php:457 views/packages/main/s2.scan3.php:531
1849
+ #: views/settings/packages.php:208
1850
+ msgid "Archive Engine"
1851
+ msgstr ""
1852
+
1853
+ #: views/packages/main/s2.scan3.php:459
1854
+ #, php-format
1855
+ msgid " With DupArchive, Duplicator is restricted to processing sites up to %s. To process larger sites, consider these recommendations. "
1856
+ msgstr ""
1857
+
1858
+ #: views/packages/main/s2.scan3.php:468
1859
+ msgid "Step 1"
1860
+ msgstr ""
1861
+
1862
+ #: views/packages/main/s2.scan3.php:469
1863
+ #, php-format
1864
+ msgid "- Add data filters to get the package size under %s: "
1865
+ msgstr ""
1866
+
1867
+ #: views/packages/main/s2.scan3.php:471
1868
+ msgid "- In the 'Size Checks' section above consider adding filters (if notice is shown)."
1869
+ msgstr ""
1870
+
1871
+ #: views/packages/main/s2.scan3.php:473
1872
+ #, php-format
1873
+ msgid "- In %s consider adding file/directory or database table filters."
1874
+ msgstr ""
1875
+
1876
+ #: views/packages/main/s2.scan3.php:477
1877
+ msgid "covered here."
1878
+ msgstr ""
1879
+
1880
+ #: views/packages/main/s2.scan3.php:478
1881
+ #, php-format
1882
+ msgid "- Perform a two part install %s"
1883
+ msgstr ""
1884
+
1885
+ #: views/packages/main/s2.scan3.php:481
1886
+ msgid "ZipArchive Engine"
1887
+ msgstr ""
1888
+
1889
+ #: views/packages/main/s2.scan3.php:482
1890
+ #, php-format
1891
+ msgid "- Switch to the %s which requires a capable hosting provider (VPS recommended)."
1892
+ msgstr ""
1893
+
1894
+ #: views/packages/main/s2.scan3.php:486
1895
+ #, php-format
1896
+ msgid "- Consider upgrading to %s for large site support. (unlimited)"
1897
+ msgstr ""
1898
+
1899
+ #: views/packages/main/s2.scan3.php:496
1900
+ msgid "Migrate large, multi-gig sites with"
1901
+ msgstr ""
1902
+
1903
+ #: views/packages/main/s2.scan3.php:511
1904
+ msgid "Scan Details"
1905
+ msgstr ""
1906
+
1907
+ #: views/packages/main/s2.scan3.php:518
1908
+ msgid "Copy Quick Filter Paths"
1909
+ msgstr ""
1910
+
1911
+ #: views/packages/main/s2.scan3.php:537
1912
+ msgid "Name:"
1913
+ msgstr ""
1914
+
1915
+ #: views/packages/main/s2.scan3.php:538
1916
+ msgid "Host:"
1917
+ msgstr ""
1918
+
1919
+ #: views/packages/main/s2.scan3.php:540
1920
+ msgid "Build Mode:"
1921
+ msgstr ""
1922
+
1923
+ #: views/packages/main/s2.scan3.php:556 views/settings/gopro.php:55
1924
+ msgid "File Filters"
1925
+ msgstr ""
1926
+
1927
+ #: views/packages/main/s2.scan3.php:557
1928
+ #: views/tools/diagnostics/inc.settings.php:167
1929
+ msgid "Disabled"
1930
+ msgstr ""
1931
+
1932
+ #: views/packages/main/s2.scan3.php:571
1933
+ msgid "No custom directory filters set."
1934
+ msgstr ""
1935
+
1936
+ #: views/packages/main/s2.scan3.php:581
1937
+ msgid "No file extension filters have been set."
1938
+ msgstr ""
1939
+
1940
+ #: views/packages/main/s2.scan3.php:593
1941
+ msgid "No custom file filters set."
1942
+ msgstr ""
1943
+
1944
+ #: views/packages/main/s2.scan3.php:597
1945
+ msgid "Auto Directory Filters"
1946
+ msgstr ""
1947
+
1948
+ #: views/packages/main/s2.scan3.php:603
1949
+ msgid "Auto File Filters"
1950
+ msgstr ""
1951
+
1952
+ #: views/packages/main/s2.scan3.php:616
1953
+ msgid "Path filters will be skipped during the archive process when enabled."
1954
+ msgstr ""
1955
+
1956
+ #: views/packages/main/s2.scan3.php:618
1957
+ msgid "[view json result report]"
1958
+ msgstr ""
1959
+
1960
+ #: views/packages/main/s2.scan3.php:621
1961
+ msgid "Auto filters are applied to prevent archiving other backup sets."
1962
+ msgstr ""
1963
+
1964
+ #: views/packages/main/s2.scan3.php:632 views/packages/main/s2.scan3.php:641
1965
+ msgid "Click to Copy"
1966
+ msgstr ""
1967
+
1968
+ #: views/packages/main/s2.scan3.php:646
1969
+ msgid "Copy the paths above and apply them as needed on Step 1 &gt; Archive &gt; Files section."
1970
+ msgstr ""
1971
+
1972
+ #: views/packages/main/s2.scan3.php:663
1973
+ msgid "Directory applied filter set."
1974
+ msgstr ""
1975
+
1976
+ #: views/packages/main/s2.scan3.php:690
1977
+ msgid "No directories have been selected!"
1978
+ msgstr ""
1979
+
1980
+ #: views/packages/main/s2.scan3.php:694
1981
+ msgid "No files have been selected!"
1982
+ msgstr ""
1983
+
1984
+ #: views/packages/main/s2.scan3.php:732
1985
+ msgid "Copied to Clipboard!"
1986
+ msgstr ""
1987
+
1988
+ #: views/packages/main/s2.scan3.php:734
1989
+ msgid "Manual copy of selected text required on this browser."
1990
+ msgstr ""
1991
+
1992
+ #: views/packages/main/s2.scan3.php:741
1993
+ msgid "Initializing Please Wait..."
1994
+ msgstr ""
1995
+
1996
+ #: views/packages/main/s2.scan3.php:784 views/packages/main/s2.scan3.php:791
1997
+ msgid "Error applying filters. Please go back to Step 1 to add filter manually!"
1998
+ msgstr ""
1999
+
2000
+ #: views/packages/main/s2.scan3.php:867
2001
+ msgid "Unable to report on any tables"
2002
+ msgstr ""
2003
+
2004
+ #: views/packages/main/s2.scan3.php:893
2005
+ msgid "Unable to report on database stats"
2006
+ msgstr ""
2007
+
2008
+ #: views/packages/main/s3.build.php:16
2009
+ msgid "Help review the plugin"
2010
+ msgstr ""
2011
+
2012
+ #: views/packages/main/s3.build.php:19
2013
+ msgid "Want more power? Try"
2014
+ msgstr ""
2015
+
2016
+ #: views/packages/main/s3.build.php:84
2017
+ msgid "Step 3: Build Package"
2018
+ msgstr ""
2019
+
2020
+ #: views/packages/main/s3.build.php:114
2021
+ msgid "Building Package"
2022
+ msgstr ""
2023
+
2024
+ #: views/packages/main/s3.build.php:117
2025
+ msgid "Keep this window open and do not close during the build process."
2026
+ msgstr ""
2027
+
2028
+ #: views/packages/main/s3.build.php:118
2029
+ msgid "This may take several minutes to complete."
2030
+ msgstr ""
2031
+
2032
+ #: views/packages/main/s3.build.php:122
2033
+ msgid "Build Status"
2034
+ msgstr ""
2035
+
2036
+ #: views/packages/main/s3.build.php:129
2037
+ msgid "Package Completed"
2038
+ msgstr ""
2039
+
2040
+ #: views/packages/main/s3.build.php:134
2041
+ msgid "Process Time"
2042
+ msgstr ""
2043
+
2044
+ #: views/packages/main/s3.build.php:140
2045
+ msgid "Download Files"
2046
+ msgstr ""
2047
+
2048
+ #: views/packages/main/s3.build.php:142
2049
+ msgid "Click to download installer file"
2050
+ msgstr ""
2051
+
2052
+ #: views/packages/main/s3.build.php:145
2053
+ msgid "Click to download archive file"
2054
+ msgstr ""
2055
+
2056
+ #: views/packages/main/s3.build.php:151
2057
+ msgid "Click to download both files"
2058
+ msgstr ""
2059
+
2060
+ #: views/packages/main/s3.build.php:152
2061
+ msgid "One-Click Download"
2062
+ msgstr ""
2063
+
2064
+ #: views/packages/main/s3.build.php:155
2065
+ msgid "One Click:"
2066
+ msgstr ""
2067
+
2068
+ #: views/packages/main/s3.build.php:156
2069
+ msgid "Clicking this link will open both the installer and archive download prompts at the same time. On some browsers you may have to disable pop-up warnings on this domain for this to work correctly."
2070
+ msgstr ""
2071
+
2072
+ #: views/packages/main/s3.build.php:164
2073
+ msgid "How do I install this Package?"
2074
+ msgstr ""
2075
+
2076
+ #: views/packages/main/s3.build.php:176
2077
+ msgid "Host Build Interrupt"
2078
+ msgstr ""
2079
+
2080
+ #: views/packages/main/s3.build.php:177
2081
+ msgid "This server cannot complete the build due to host setup constraints."
2082
+ msgstr ""
2083
+
2084
+ #: views/packages/main/s3.build.php:178
2085
+ msgid "To get past this hosts limitation consider the options below by clicking each section."
2086
+ msgstr ""
2087
+
2088
+ #: views/packages/main/s3.build.php:184
2089
+ msgid "Option 1: Try DupArchive"
2090
+ msgstr ""
2091
+
2092
+ #: views/packages/main/s3.build.php:188
2093
+ msgid "OPTION 1:"
2094
+ msgstr ""
2095
+
2096
+ #: views/packages/main/s3.build.php:190
2097
+ msgid "Enable the DupArchive format which is specific to Duplicator and designed to perform better on constrained budget hosts."
2098
+ msgstr ""
2099
+
2100
+ #: views/packages/main/s3.build.php:194
2101
+ msgid "Note: DupArchive on Duplicator only supports sites up to 500MB. If your site is over 500MB then use a file filter on step 1 to get the size below 500MB or try the other options mentioned below. Alternatively, you may want to consider"
2102
+ msgstr ""
2103
+
2104
+ #: views/packages/main/s3.build.php:200
2105
+ msgid " which is capable of migrating sites much larger than 500MB."
2106
+ msgstr ""
2107
+
2108
+ #: views/packages/main/s3.build.php:204 views/packages/main/s3.build.php:271
2109
+ msgid "Please follow these steps:"
2110
+ msgstr ""
2111
+
2112
+ #: views/packages/main/s3.build.php:206
2113
+ msgid "On the scanner step check to make sure your package is under 500MB. If not see additional options below."
2114
+ msgstr ""
2115
+
2116
+ #: views/packages/main/s3.build.php:208
2117
+ msgid "Go to Duplicator &gt; Settings &gt; Packages Tab &gt; Archive Engine &gt;"
2118
+ msgstr ""
2119
+
2120
+ #: views/packages/main/s3.build.php:209
2121
+ msgid "Enable DupArchive"
2122
+ msgstr ""
2123
+
2124
+ #: views/packages/main/s3.build.php:211
2125
+ msgid "Build a new package using the new engine format."
2126
+ msgstr ""
2127
+
2128
+ #: views/packages/main/s3.build.php:215
2129
+ msgid "Note: The DupArchive engine will generate an archive.daf file. This file is very similar to a .zip except that it can only be extracted by the installer.php file or the"
2130
+ msgstr ""
2131
+
2132
+ #: views/packages/main/s3.build.php:217
2133
+ msgid "commandline extraction tool"
2134
+ msgstr ""
2135
+
2136
+ #: views/packages/main/s3.build.php:225
2137
+ msgid "Option 2: File Filters"
2138
+ msgstr ""
2139
+
2140
+ #: views/packages/main/s3.build.php:229
2141
+ msgid "OPTION 2:"
2142
+ msgstr ""
2143
+
2144
+ #: views/packages/main/s3.build.php:231
2145
+ msgid "The first pass for reading files on some budget hosts maybe slow and have conflicts with strict timeout settings setup by the hosting provider. In these cases, it is recommended to retry the build by adding file filters to larger files/directories."
2146
+ msgstr ""
2147
+
2148
+ #: views/packages/main/s3.build.php:236
2149
+ msgid "For example, you could filter out the \"/wp-content/uploads/\" folder to create the package then move the files from that directory over manually. If this work-flow is not desired or does not work please check-out the other options below."
2150
+ msgstr ""
2151
+
2152
+ #: views/packages/main/s3.build.php:241
2153
+ msgid "Retry Build With Filters"
2154
+ msgstr ""
2155
+
2156
+ #: views/packages/main/s3.build.php:247
2157
+ msgid "Build Folder:"
2158
+ msgstr ""
2159
+
2160
+ #: views/packages/main/s3.build.php:248
2161
+ msgid "On some servers the build will continue to run in the background. To validate if a build is still running; open the 'tmp' folder above and see if the archive file is growing in size or check the main packages screen to see if the package completed. If it is not then your server has strict timeout constraints."
2162
+ msgstr ""
2163
+
2164
+ #: views/packages/main/s3.build.php:260
2165
+ msgid "Option 3: Two-Part Install"
2166
+ msgstr ""
2167
+
2168
+ #: views/packages/main/s3.build.php:264
2169
+ msgid "OPTION 3:"
2170
+ msgstr ""
2171
+
2172
+ #: views/packages/main/s3.build.php:266
2173
+ msgid "A two-part install minimizes server load and can avoid I/O and CPU issues encountered on some budget hosts. With this procedure you simply build a 'database-only' archive, manually move the website files, and then run the installer to complete the process."
2174
+ msgstr ""
2175
+
2176
+ #: views/packages/main/s3.build.php:270
2177
+ msgid " Overview"
2178
+ msgstr ""
2179
+
2180
+ #: views/packages/main/s3.build.php:273
2181
+ msgid "Click the button below to go back to Step 1."
2182
+ msgstr ""
2183
+
2184
+ #: views/packages/main/s3.build.php:274
2185
+ msgid "On Step 1 the \"Archive Only the Database\" checkbox will be auto checked."
2186
+ msgstr ""
2187
+
2188
+ #: views/packages/main/s3.build.php:276
2189
+ msgid "Complete the package build and follow the "
2190
+ msgstr ""
2191
+
2192
+ #: views/packages/main/s3.build.php:286
2193
+ msgid "Yes. I have read the above overview and would like to continue!"
2194
+ msgstr ""
2195
+
2196
+ #: views/packages/main/s3.build.php:288
2197
+ msgid "Start Two-Part Install Process"
2198
+ msgstr ""
2199
+
2200
+ #: views/packages/main/s3.build.php:297
2201
+ msgid "Option 4: Configure Server"
2202
+ msgstr ""
2203
+
2204
+ #: views/packages/main/s3.build.php:301
2205
+ msgid "OPTION 4:"
2206
+ msgstr ""
2207
+
2208
+ #: views/packages/main/s3.build.php:302
2209
+ msgid "This option is available on some hosts that allow for users to adjust server configurations. With this option you will be directed to an FAQ page that will show various recommendations you can take to improve/unlock constraints set up on this server."
2210
+ msgstr ""
2211
+
2212
+ #: views/packages/main/s3.build.php:308
2213
+ msgid "Diagnose Server Setup"
2214
+ msgstr ""
2215
+
2216
+ #: views/packages/main/s3.build.php:312
2217
+ msgid "RUNTIME DETAILS"
2218
+ msgstr ""
2219
+
2220
+ #: views/packages/main/s3.build.php:315
2221
+ msgid "Allowed Runtime:"
2222
+ msgstr ""
2223
+
2224
+ #: views/packages/main/s3.build.php:319
2225
+ msgid "PHP Max Execution"
2226
+ msgstr ""
2227
+
2228
+ #: views/packages/main/s3.build.php:329
2229
+ msgid "This value is represented in seconds. A value of 0 means no timeout limit is set for PHP."
2230
+ msgstr ""
2231
+
2232
+ #: views/packages/main/s3.build.php:333 views/settings/packages.php:167
2233
+ msgid "Mode"
2234
+ msgstr ""
2235
+
2236
+ #: views/packages/main/s3.build.php:339
2237
+ msgid "PHP Max Execution Mode"
2238
+ msgstr ""
2239
+
2240
+ #: views/packages/main/s3.build.php:341
2241
+ msgid "If the value is [dynamic] then its possible for PHP to run longer than the default. If the value is [fixed] then PHP will not be allowed to run longer than the default. <br/><br/> If this value is larger than the [Allowed Runtime] above then the web server has been enabled with a timeout cap and is overriding the PHP max time setting."
2242
+ msgstr ""
2243
+
2244
+ #: views/packages/main/s3.build.php:362
2245
+ msgid "Read Package Log File"
2246
+ msgstr ""
2247
+
2248
+ #: views/packages/screen.php:64
2249
+ msgid "<b><i class='fa fa-archive'></i> Packages » All</b><br/> The 'Packages' section is the main interface for managing all the packages that have been created. A Package consists of two core files, the 'archive.zip' and the 'installer.php' file. The archive file is a zip file containing all your WordPress files and a copy of your WordPress database. The installer file is a php file that when browsed to via a web browser presents a wizard that redeploys/installs the website by extracting the archive file and installing the database. To create a package, click the 'Create New' button and follow the prompts. <br/><br/><b><i class='fa fa-download'></i> Downloads</b><br/>To download the package files click on the Installer and Archive buttons after creating a package. The archive file will have a copy of the installer inside of it named installer-backup.php in case the original installer file is lost. To see the details of a package click on the <i class='fa fa-archive'></i> details button.<br/><br/><b><i class='far fa-file-archive'></i> Archive Types</b><br/>An archive file can be saved as either a .zip file or .daf file. A zip file is a common archive format used to compress and group files. The daf file short for 'Duplicator Archive Format' is a custom format used specifically for working with larger packages and scale-ability issues on many shared hosting platforms. Both formats work very similar. The main difference is that the daf file can only be extracted using the installer.php file or the <a href='https://snapcreek.com/duplicator/docs/faqs-tech/#faq-trouble-052-q' target='_blank'>DAF extraction tool</a>. The zip file can be used by the installer.php or other zip tools like winrar/7zip/winzip or other client-side tools. <br/><br/>"
2250
+ msgstr ""
2251
+
2252
+ #: views/packages/screen.php:85
2253
+ msgid "<b>Packages New » 1 Setup</b> <br/>The setup step allows for optional filtered directory paths, files, file extensions and database tables. To filter specific system files, click the 'Enable File Filters' checkbox and add the full path of the file or directory, followed by a semicolon. For a file extension add the name (i.e. 'zip') followed by a semicolon. <br/><br/>To exclude a database table, check the box labeled 'Enable Table Filters' and check the table name to exclude. To include only a copy of your database in the archive file check the box labeled 'Archive Only the Database'. The installer.php file can optionally be pre-filled with data at install time but is not required. <br/><br/>"
2254
+ msgstr ""
2255
+
2256
+ #: views/packages/screen.php:97
2257
+ msgid "<b>Packages » 2 Scan</b> <br/>The plugin will scan your system files and database to let you know if there are any concerns or issues that may be present. All items in green mean the checks looked good. All items in red indicate a warning. Warnings will not prevent the build from running, however if you do run into issues with the build then investigating the warnings should be considered. Click on each section for more details about each scan check. <br/><br/>"
2258
+ msgstr ""
2259
+
2260
+ #: views/packages/screen.php:105
2261
+ msgid ""
2262
+ "<b>Packages » 3 Build</b> <br/>The final step in the build process where the installer script and archive of the website can be downloaded. To start the install process follow these steps: <ol><li>Download the installer.php and archive.zip files to your local computer.</li><li>For localhost installs be sure you have PHP, Apache & MySQL installed on your local computer with software such as XAMPP, Instant WordPress or MAMP for MAC. Place the package.zip and installer.php into any empty directory under your webroot then browse to the installer.php via your web browser to launch the install wizard.</li><li>For remote installs use FTP or cPanel to upload both the archive.zip and installer.php to your hosting provider. Place the files in a new empty directory under your host's webroot accessible from a valid URL such as http://your-domain/your-wp-directory/installer.php to launch the install wizard. On some hosts the root directory will be a something like public_html -or- www. If your're not sure contact your hosting provider. </li></ol>For complete instructions see:<br/>\n"
2263
+ "\t\t\t\t\t<a href='https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&amp;utm_medium=wordpress_plugin&amp;utm_content=package_built_install_help&amp;utm_campaign=duplicator_free#quick-040-q' target='_blank'>\n"
2264
+ "\t\t\t\t\tHow do I install this Package?</a><br/><br/>"
2265
+ msgstr ""
2266
+
2267
+ #: views/packages/screen.php:122
2268
+ msgid "<b>Packages » Details</b> <br/>The details view will give you a full break-down of the package including any errors that may have occured during the install. <br/><br/>"
2269
+ msgstr ""
2270
+
2271
+ #: views/settings/about-info.php:49
2272
+ msgid "Duplicator can streamline your workflow and quickly clone/migrate a WordPress site. The plugin helps admins, designers and developers speed up the migration process of moving a WordPress site. Please help us continue development by giving the plugin a 5 star."
2273
+ msgstr ""
2274
+
2275
+ #: views/settings/about-info.php:58
2276
+ msgid "Rate Duplicator"
2277
+ msgstr ""
2278
+
2279
+ #: views/settings/about-info.php:69
2280
+ msgid "Support Duplicator"
2281
+ msgstr ""
2282
+
2283
+ #: views/settings/about-info.php:71
2284
+ msgid "with a 5 star review!"
2285
+ msgstr ""
2286
+
2287
+ #: views/settings/about-info.php:85
2288
+ msgid "Spread the Word"
2289
+ msgstr ""
2290
+
2291
+ #: views/settings/about-info.php:92
2292
+ msgid "Facebook"
2293
+ msgstr ""
2294
+
2295
+ #: views/settings/about-info.php:95
2296
+ msgid "Twitter"
2297
+ msgstr ""
2298
+
2299
+ #: views/settings/about-info.php:98
2300
+ msgid "LinkedIn"
2301
+ msgstr ""
2302
+
2303
+ #: views/settings/about-info.php:101
2304
+ msgid "Google+"
2305
+ msgstr ""
2306
+
2307
+ #: views/settings/about-info.php:120
2308
+ msgid "Stay in the Loop"
2309
+ msgstr ""
2310
+
2311
+ #: views/settings/about-info.php:130
2312
+ msgid "Subscribe to the Duplicator newsletter and stay on top of great ideas, tutorials, and better ways to improve your workflows"
2313
+ msgstr ""
2314
+
2315
+ #: views/settings/controller.php:24
2316
+ msgid "Schedules"
2317
+ msgstr ""
2318
+
2319
+ #: views/settings/controller.php:26
2320
+ msgid "License"
2321
+ msgstr ""
2322
+
2323
+ #: views/settings/controller.php:27
2324
+ msgid "About"
2325
+ msgstr ""
2326
+
2327
+ #: views/settings/general.php:8
2328
+ msgid "General Settings Saved"
2329
+ msgstr ""
2330
+
2331
+ #: views/settings/general.php:88
2332
+ msgid "Plugin"
2333
+ msgstr ""
2334
+
2335
+ #: views/settings/general.php:92 views/tools/diagnostics/inc.settings.php:91
2336
+ #: views/tools/diagnostics/inc.settings.php:110
2337
+ #: views/tools/diagnostics/inc.settings.php:183
2338
+ msgid "Version"
2339
+ msgstr ""
2340
+
2341
+ #: views/settings/general.php:99
2342
+ msgid "Uninstall"
2343
+ msgstr ""
2344
+
2345
+ #: views/settings/general.php:102
2346
+ msgid "Delete Plugin Settings"
2347
+ msgstr ""
2348
+
2349
+ #: views/settings/general.php:105
2350
+ msgid "Delete Entire Storage Directory"
2351
+ msgstr ""
2352
+
2353
+ #: views/settings/general.php:112
2354
+ msgid "Full Path"
2355
+ msgstr ""
2356
+
2357
+ #: views/settings/general.php:115
2358
+ msgid "Disable .htaccess File In Storage Directory"
2359
+ msgstr ""
2360
+
2361
+ #: views/settings/general.php:117
2362
+ msgid "Disable if issues occur when downloading installer/archive files."
2363
+ msgstr ""
2364
+
2365
+ #: views/settings/general.php:122
2366
+ msgid "Custom Roles"
2367
+ msgstr ""
2368
+
2369
+ #: views/settings/general.php:125
2370
+ msgid "Enable User Role Editor Plugin Integration"
2371
+ msgstr ""
2372
+
2373
+ #: views/settings/general.php:130
2374
+ msgid "The User Role Editor Plugin"
2375
+ msgstr ""
2376
+
2377
+ #: views/settings/general.php:131 views/settings/gopro.php:46
2378
+ msgid "Free"
2379
+ msgstr ""
2380
+
2381
+ #: views/settings/general.php:132
2382
+ msgid "or"
2383
+ msgstr ""
2384
+
2385
+ #: views/settings/general.php:133 views/settings/gopro.php:47
2386
+ msgid "Professional"
2387
+ msgstr ""
2388
+
2389
+ #: views/settings/general.php:134
2390
+ msgid "must be installed to use"
2391
+ msgstr ""
2392
+
2393
+ #: views/settings/general.php:135
2394
+ msgid "this feature."
2395
+ msgstr ""
2396
+
2397
+ #: views/settings/general.php:144
2398
+ msgid "Debug"
2399
+ msgstr ""
2400
+
2401
+ #: views/settings/general.php:148
2402
+ msgid "Debugging"
2403
+ msgstr ""
2404
+
2405
+ #: views/settings/general.php:151
2406
+ msgid "Enable debug options throughout user interface"
2407
+ msgstr ""
2408
+
2409
+ #: views/settings/general.php:155
2410
+ msgid "Trace Log"
2411
+ msgstr ""
2412
+
2413
+ #: views/settings/general.php:161
2414
+ msgid "Turns on detailed operation logging. Logging will occur in both PHP error and local trace logs."
2415
+ msgstr ""
2416
+
2417
+ #: views/settings/general.php:163
2418
+ msgid "WARNING: Only turn on this setting when asked to by support as tracing will impact performance."
2419
+ msgstr ""
2420
+
2421
+ #: views/settings/general.php:167
2422
+ msgid "Download Trace Log"
2423
+ msgstr ""
2424
+
2425
+ #: views/settings/general.php:175
2426
+ msgid "Advanced"
2427
+ msgstr ""
2428
+
2429
+ #: views/settings/general.php:182
2430
+ msgid "Reset Packages"
2431
+ msgstr ""
2432
+
2433
+ #: views/settings/general.php:185
2434
+ msgid "This process will reset all packages by deleting those without a completed status, reset the active package id and perform a cleanup of the build tmp file."
2435
+ msgstr ""
2436
+
2437
+ #: views/settings/general.php:188
2438
+ msgid "Reset Settings"
2439
+ msgstr ""
2440
+
2441
+ #: views/settings/general.php:189
2442
+ msgid "This action should only be used if the packages screen is having issues or a build is stuck."
2443
+ msgstr ""
2444
+
2445
+ #: views/settings/general.php:194
2446
+ msgid "Archive scan"
2447
+ msgstr ""
2448
+
2449
+ #: views/settings/general.php:197
2450
+ msgid "Skip"
2451
+ msgstr ""
2452
+
2453
+ #: views/settings/general.php:199
2454
+ msgid "If enabled all files check on scan will be skipped before package creation. In some cases, this option can be beneficial if the scan process is having issues running or returning errors."
2455
+ msgstr ""
2456
+
2457
+ #: views/settings/general.php:205
2458
+ msgid "Other Plugins/Themes JS"
2459
+ msgstr ""
2460
+
2461
+ #: views/settings/general.php:208 views/settings/general.php:224
2462
+ msgid "Unhook them on Duplicator pages"
2463
+ msgstr ""
2464
+
2465
+ #: views/settings/general.php:211
2466
+ msgid "Check this option if other plugins/themes JavaScript files are conflicting with Duplicator."
2467
+ msgstr ""
2468
+
2469
+ #: views/settings/general.php:215 views/settings/general.php:231
2470
+ msgid "Do not modify this setting unless you know the expected result or have talked to support."
2471
+ msgstr ""
2472
+
2473
+ #: views/settings/general.php:221
2474
+ msgid "Other Plugins/Themes CSS"
2475
+ msgstr ""
2476
+
2477
+ #: views/settings/general.php:227
2478
+ msgid "Check this option if other plugins/themes CSS files are conflicting with Duplicator."
2479
+ msgstr ""
2480
+
2481
+ #: views/settings/general.php:240
2482
+ msgid "Save General Settings"
2483
+ msgstr ""
2484
+
2485
+ #: views/settings/general.php:249
2486
+ msgid "Reset Packages ?"
2487
+ msgstr ""
2488
+
2489
+ #: views/settings/general.php:250
2490
+ msgid "This will clear and reset all of the current temporary packages. Would you like to continue?"
2491
+ msgstr ""
2492
+
2493
+ #: views/settings/general.php:251
2494
+ msgid "Resetting settings, Please Wait..."
2495
+ msgstr ""
2496
+
2497
+ #: views/settings/general.php:254
2498
+ msgid "Yes"
2499
+ msgstr ""
2500
+
2501
+ #: views/settings/general.php:255
2502
+ msgid "No"
2503
+ msgstr ""
2504
+
2505
+ #: views/settings/general.php:259
2506
+ msgid "AJAX ERROR!"
2507
+ msgstr ""
2508
+
2509
+ #: views/settings/general.php:259
2510
+ msgid "Ajax request error"
2511
+ msgstr ""
2512
+
2513
+ #: views/settings/general.php:264 views/settings/general.php:317
2514
+ msgid "RESPONSE ERROR!"
2515
+ msgstr ""
2516
+
2517
+ #: views/settings/general.php:307
2518
+ msgid "Packages successfully reset"
2519
+ msgstr ""
2520
+
2521
+ #: views/settings/gopro.php:39
2522
+ msgid "The simplicity of Duplicator"
2523
+ msgstr ""
2524
+
2525
+ #: views/settings/gopro.php:40
2526
+ msgid "with power for everyone."
2527
+ msgstr ""
2528
+
2529
+ #: views/settings/gopro.php:45
2530
+ msgid "Feature"
2531
+ msgstr ""
2532
+
2533
+ #: views/settings/gopro.php:50
2534
+ msgid "Backup Files & Database"
2535
+ msgstr ""
2536
+
2537
+ #: views/settings/gopro.php:60
2538
+ msgid "Database Table Filters"
2539
+ msgstr ""
2540
+
2541
+ #: views/settings/gopro.php:65
2542
+ msgid "Migration Wizard"
2543
+ msgstr ""
2544
+
2545
+ #: views/settings/gopro.php:70
2546
+ msgid "Scheduled Backups"
2547
+ msgstr ""
2548
+
2549
+ #: views/settings/gopro.php:77
2550
+ msgid "Amazon S3 Storage"
2551
+ msgstr ""
2552
+
2553
+ #: views/settings/gopro.php:85
2554
+ msgid "Dropbox Storage "
2555
+ msgstr ""
2556
+
2557
+ #: views/settings/gopro.php:93
2558
+ msgid "Google Drive Storage"
2559
+ msgstr ""
2560
+
2561
+ #: views/settings/gopro.php:101
2562
+ msgid "Microsoft One Drive Storage"
2563
+ msgstr ""
2564
+
2565
+ #: views/settings/gopro.php:109
2566
+ msgid "Remote FTP/SFTP Storage"
2567
+ msgstr ""
2568
+
2569
+ #: views/settings/gopro.php:115
2570
+ msgid "Overwrite Live Site"
2571
+ msgstr ""
2572
+
2573
+ #: views/settings/gopro.php:117
2574
+ msgid "Overwrite Existing Site"
2575
+ msgstr ""
2576
+
2577
+ #: views/settings/gopro.php:118
2578
+ msgid "Overwrite a live site. Makes installing super-fast!"
2579
+ msgstr ""
2580
+
2581
+ #: views/settings/gopro.php:124 views/settings/gopro.php:126
2582
+ msgid "Large Site Support"
2583
+ msgstr ""
2584
+
2585
+ #: views/settings/gopro.php:127
2586
+ msgid "Advanced archive engine processes multi-gig sites - even on stubborn budget hosts!"
2587
+ msgstr ""
2588
+
2589
+ #: views/settings/gopro.php:133
2590
+ msgid "Multiple Archive Engines"
2591
+ msgstr ""
2592
+
2593
+ #: views/settings/gopro.php:138
2594
+ msgid "Server Throttling"
2595
+ msgstr ""
2596
+
2597
+ #: views/settings/gopro.php:143
2598
+ msgid "Background Processing"
2599
+ msgstr ""
2600
+
2601
+ #: views/settings/gopro.php:148
2602
+ msgid "Installer Passwords"
2603
+ msgstr ""
2604
+
2605
+ #: views/settings/gopro.php:153
2606
+