1<!DOCTYPE html> 2<html lang="en-us"> 3 <head> 4
4<script> 5 document.addEventListener("DOMContentLoaded", function(event) { 6 function usmPageRenderUtil(){var e=this;e.pageCategory="",e.heroElements=[],e.fpTime=null,e.fmpTime=null,e.fmpToTti=null,e.ttiTime=null,e.checker=null,e.waitTime=5e3,e.debug=!1,e.run=function(t){var n=t.heroElementIdentifiers||[".page-hero-element"];return e.pageCategory=t.pageCategory,e.debug=t.debug||!1,new Promise(function(t,r){e.observePaint().then(function(){e.observeHeroElements(n).then(function(){e.observeLongTasks().then(function(){e.fmpToTti=e.ttiTime-e.fmpTime,e.debug&&(console.log("FP: "+e.fpTime),console.log("FMP: "+e.fmpTime),console.log("FMP to TTI: "+e.fmpToTti),console.log("TTI: "+e.ttiTime)),t(e)})})})})},e.observePaint=function(){return new Promise(function(t,n){if(PerformanceObserver===null||PerformanceObserver===undefined)return n(),!1;var r=new PerformanceObserver(function(n){var r=n.getEntries();for(var i in r){var s=r[i],o=s.name;e.fpTime=performance.now();if("first-paint"===s.name){e.debug&&(console.log(s),console.log("metricName"),console.log(o)),t();return}}});r.observe({entryTypes:["paint"]})})},e.observeHeroElements=function(t){return new Promise(function(n,r){t=t.join(),e.debug&&console.log("Hero elements: "+t),e.heroElements=[].slice.call(document.querySelectorAll(t)),e.debug&&console.log("Hero elements count: ["+e.heroElements.length+"]");var i=new MutationObserver(function(t){for(var r=0;r<e.heroElements.length;r++){var s=e.heroElements[r];document.contains(s)&&e.heroElements.splice(r,1)}e.heroElements.length<=0&&(i.disconnect(),e.fmpTime=performance.now(),e.debug&&console.log("Hero observer disconnected. ["+e.getCurrentTime(!0)+"] Unix: ["+e.getCurrentTime()+"]"),n()),e.debug&&console.log("Hero elements not displayed. ["+e.heroElements.length+"].")});i.observe(document,{attributes:!0,childList:!0,characterData:!1,subtree:!0})})},e.observeLongTasks=function(){return new Promise(function(t,n){if(PerformanceObserver===null||PerformanceObserver===undefined)return n(),!1;var r=new PerformanceObserver(function(n){var i=n.getEntries();for(var s in i){var o=i[s];o instanceof PerformanceLongTaskTiming&&(e.debug&&console.log(o),e.scheduleCheck(r,t))}});r.observe({entryTypes:["longtask"]})})},this.scheduleCheck=function(e,t){var n=this,r=performance.now();clearTimeout(this.checker),this.checker=setTimeout(function(){n.ttiTime=r,e.disconnect(),t(),n.debug&&console.log("Performance observer disconnected. ["+n.getCurrentTime(!0)+"] Unix: ["+n.getCurrentTime()+"]")},n.waitTime)},e.getCurrentTime=function(e){return e===!0?(new Date).toUTCString():(new Date).getTime()},e.getPayload=function(){return{"Time to Interactive":e.formatTime(e.ttiTime),"First Paint":e.formatTime(e.fpTime),"First Meaningful Paint":e.formatTime(e.fmpTime),"FMP to TTI":e.formatTime(e.fmpToTti),"Page Category":e.pageCategory}},e.formatTime=function(e){e/=1e3;var t=Math.pow(10,1);return Math.round(e*t)/t}}; 7 var renderUtil = new usmPageRenderUtil(); 8 var debug = false; 9 renderUtil.run({heroElementIdentifiers: false, pageCategory: "User Login", debug: debug}).then(function (renderUtil) { 10 if (debug) { 11 console.log(renderUtil.getPayload()); 12 } 13 }); 14 }); 15 </script>
15<script> 16window.dataLayer = window.dataLayer || []; 17window.dataLayer.push({"hasSEO":"UA-73987-39","hasGlobalRE":"UA-73987-25","hasPremium":"UA-73987-27","hasCompassV2":"UA-73987-51","NumberOfAgents":4,"NumberOfAgentWebsites":0,"MLS":["ME_MAINE_API"],"CallTracking":false,"MapSearchV2":true,"OffMarketProperty":false,"VendorsPage":false,"Blog":true,"LuxuryBuildings":false,"TownPages":false,"MarketReportTool":false,"AVMTool":false,"LeadRouter":true}); 18</script>
18 19�<!-- Google Tag Manager --> 20�
20<script>
vendor: 317 bytes, line 20
20(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','
20GTM-NR38L3C
vendor: 3 bytes, line 20
20');
20</script>
20 21�<!-- End Google Tag Manager --> 22�<title>Sargent Real Estate</title> 23 <meta name="description" content="" /> 24 <meta name="author" content="Sargent Real Estate" /> 25 <link rel="canonical" href="https://www.sargentre.com/user/login/"/> 26 <link rel="copyright" href="https://d.usmre.com/UnionStreetMediaTermsofUse.pdf"/><meta property="fb:app_id" content="4029847067250472" /> 27 <meta property="og:title" content="Sargent Real Estate" /> 28 <meta property="og:description" content="" /> 29 <meta property="og:url" content="https://www.sargentre.com/user/login/" /> 30 <meta property="og:type" content="website" /> 31 <meta property="og:site_name" content="Sargent Real Estate" /> 32 <meta name="twitter:card" content="summary" /> 33 <meta name="twitter:title" content="Sargent Real Estate" /> 34 <meta name="twitter:description" content="" /> 35 <meta name="google-site-verification" content="SccCnKW8x8jTyKiSy4zJrIEkhwLTsG_nMjsGcP9NUEI" /> 36 <meta name="msvalidate.01" content="7AFB407F61E561ABD1320A24E73E1F9A" /> 37 <meta name="google-site-verification" content="SccCnKW8x8jTyKiSy4zJrIEkhwLTsG_nMjsGcP9NUEI" /> 38 <link rel="shortcut icon" href="https://s3.amazonaws.com/files.usmre.com/9775/i/favicon.png?t=1685607286" /> 39<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 40<meta name="viewport" content="width=device-width, initial-scale=1"> 41<link rel="stylesheet" type="text/css" href="https://d1nn5t56all1qd.cloudfront.net/9775/styles.min.css?version=1790335606" media="screen" /><link rel="stylesheet" type="text/css" href="https://d1nn5t56all1qd.cloudfront.net/layouts/14/print.css?version=1740650881" media="print" />
41<script src="https://kit.fontawesome.com/c7bcd66c3f.js" crossorigin="anonymous"></script>
41<script>/** vim: et:ts=4:sw=4:sts=4 42 * @license RequireJS 2.3.3 Copyright jQuery Foundation and other contributors. 43 * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE 44 */ 45var requirejs,require,define;!function(global,setTimeout){function commentReplace(e,t){return t||""}function isFunction(e){return"[object Function]"===ostring.call(e)}function isArray(e){return"[object Array]"===ostring.call(e)}function each(e,t){if(e){var i;for(i=0;i<e.length&&(!e[i]||!t(e[i],i,e));i+=1);}}function eachReverse(e,t){if(e){var i;for(i=e.length-1;i>-1&&(!e[i]||!t(e[i],i,e));i-=1);}}function hasProp(e,t){return hasOwn.call(e,t)}function getOwn(e,t){return hasProp(e,t)&&e[t]}function eachProp(e,t){var i;for(i in e)if(hasProp(e,i)&&t(e[i],i))break}function mixin(e,t,i,r){return t&&eachProp(t,function(t,n){!i&&hasProp(e,n)||(!r||"object"!=typeof t||!t||isArray(t)||isFunction(t)||t instanceof RegExp?e[n]=t:(e[n]||(e[n]={}),mixin(e[n],t,i,r)))}),e}function bind(e,t){return function(){return t.apply(e,arguments)}}function scripts(){return document.getElementsByTagName("script")}function defaultOnError(e){throw e}function getGlobal(e){if(!e)return e;var t=global;return each(e.split("."),function(e){t=t[e]}),t}function makeError(e,t,i,r){var n=new Error(t+"\nhttp://requirejs.org/docs/errors.html#"+e);return n.requireType=e,n.requireModules=r,i&&(n.originalError=i),n}function newContext(e){function t(e){var t,i;for(t=0;t<e.length;t++)if(i=e[t],"."===i)e.splice(t,1),t-=1;else if(".."===i){if(0===t||1===t&&".."===e[2]||".."===e[t-1])continue;t>0&&(e.splice(t-1,2),t-=2)}}function i(e,i,r){var n,o,a,s,u,c,d,p,f,l,h,m,g=i&&i.split("/"),v=y.map,x=v&&v["*"];if(e&&(e=e.split("/"),d=e.length-1,y.nodeIdCompat&&jsSuffixRegExp.test(e[d])&&(e[d]=e[d].replace(jsSuffixRegExp,"")),"."===e[0].charAt(0)&&g&&(m=g.slice(0,g.length-1),e=m.concat(e)),t(e),e=e.join("/")),r&&v&&(g||x)){a=e.split("/");e:for(s=a.length;s>0;s-=1){if(c=a.slice(0,s).join("/"),g)for(u=g.length;u>0;u-=1)if(o=getOwn(v,g.slice(0,u).join("/")),o&&(o=getOwn(o,c))){p=o,f=s;break e}!l&&x&&getOwn(x,c)&&(l=getOwn(x,c),h=s)}!p&&l&&(p=l,f=h),p&&(a.splice(0,f,p),e=a.join("/"))}return n=getOwn(y.pkgs,e),n?n:e}function r(e){isBrowser&&each(scripts(),function(t){if(t.getAttribute("data-requiremodule")===e&&t.getAttribute("data-requirecontext")===q.contextName)return t.parentNode.removeChild(t),!0})}function n(e){var t=getOwn(y.paths,e);if(t&&isArray(t)&&t.length>1)return t.shift(),q.require.undef(e),q.makeRequire(null,{skipMap:!0})([e]),!0}function o(e){var t,i=e?e.indexOf("!"):-1;return i>-1&&(t=e.substring(0,i),e=e.substring(i+1,e.length)),[t,e]}function a(e,t,r,n){var a,s,u,c,d=null,p=t?t.name:null,f=e,l=!0,h="";return e||(l=!1,e="_@r"+(T+=1)),c=o(e),d=c[0],e=c[1],d&&(d=i(d,p,n),s=getOwn(j,d)),e&&(d?h=r?e:s&&s.normalize?s.normalize(e,function(e){return i(e,p,n)}):e.indexOf("!")===-1?i(e,p,n):e:(h=i(e,p,n),c=o(h),d=c[0],h=c[1],r=!0,a=q.nameToUrl(h))),u=!d||s||r?"":"_unnormalized"+(A+=1),{prefix:d,name:h,parentMap:t,unnormalized:!!u,url:a,originalName:f,isDefine:l,id:(d?d+"!"+h:h)+u}}function s(e){var t=e.id,i=getOwn(S,t);return i||(i=S[t]=new q.Module(e)),i}function u(e,t,i){var r=e.id,n=getOwn(S,r);!hasProp(j,r)||n&&!n.defineEmitComplete?(n=s(e),n.error&&"error"===t?i(n.error):n.on(t,i)):"defined"===t&&i(j[r])}function c(e,t){var i=e.requireModules,r=!1;t?t(e):(each(i,function(t){var i=getOwn(S,t);i&&(i.error=e,i.events.error&&(r=!0,i.emit("error",e)))}),r||req.onError(e))}function d(){globalDefQueue.length&&(each(globalDefQueue,function(e){var t=e[0];"string"==typeof t&&(q.defQueueMap[t]=!0),O.push(e)}),globalDefQueue=[])}function p(e){delete S[e],delete k[e]}function f(e,t,i){var r=e.map.id;e.error?e.emit("error",e.error):(t[r]=!0,each(e.depMaps,function(r,n){var o=r.id,a=getOwn(S,o);!a||e.depMatched[n]||i[o]||(getOwn(t,o)?(e.defineDep(n,j[o]),e.check()):f(a,t,i))}),i[r]=!0)}function l(){var e,t,i=1e3*y.waitSeconds,o=i&&q.startTime+i<(new Date).getTime(),a=[],s=[],u=!1,d=!0;if(!x){if(x=!0,eachProp(k,function(e){var i=e.map,c=i.id;if(e.enabled&&(i.isDefine||s.push(e),!e.error))if(!e.inited&&o)n(c)?(t=!0,u=!0):(a.push(c),r(c));else if(!e.inited&&e.fetched&&i.isDefine&&(u=!0,!i.prefix))return d=!1}),o&&a.length)return e=makeError("timeout","Load timeout for modules: "+a,null,a),e.contextName=q.contextName,c(e);d&&each(s,function(e){f(e,{},{})}),o&&!t||!u||!isBrowser&&!isWebWorker||w||(w=setTimeout(function(){w=0,l()},50)),x=!1}}function h(e){hasProp(j,e[0])||s(a(e[0],null,!0)).init(e[1],e[2])}function m(e,t,i,r){e.detachEvent&&!isOpera?r&&e.detachEvent(r,t):e.removeEventListener(i,t,!1)}function g(e){var t=e.currentTarget||e.srcElement;return m(t,q.onScriptLoad,"load","onreadystatechange"),m(t,q.onScriptError,"error"),{node:t,id:t&&t.getAttribute("data-requiremodule")}}function v(){var e;
45for(d();O.length;){if(e=O.shift(),null===e[0])return c(makeError("mismatch","Mismatched anonymous define() module: "+e[e.length-1]));h(e)}q.defQueueMap={}}var x,b,q,E,w,y={waitSeconds:7,baseUrl:"./",paths:{},bundles:{},pkgs:{},shim:{},config:{}},S={},k={},M={},O=[],j={},P={},R={},T=1,A=1;return E={require:function(e){return e.require?e.require:e.require=q.makeRequire(e.map)},exports:function(e){if(e.usingExports=!0,e.map.isDefine)return e.exports?j[e.map.id]=e.exports:e.exports=j[e.map.id]={}},module:function(e){return e.module?e.module:e.module={id:e.map.id,uri:e.map.url,config:function(){return getOwn(y.config,e.map.id)||{}},exports:e.exports||(e.exports={})}}},b=function(e){this.events=getOwn(M,e.id)||{},this.map=e,this.shim=getOwn(y.shim,e.id),this.depExports=[],this.depMaps=[],this.depMatched=[],this.pluginMaps={},this.depCount=0},b.prototype={init:function(e,t,i,r){r=r||{},this.inited||(this.factory=t,i?this.on("error",i):this.events.error&&(i=bind(this,function(e){this.emit("error",e)})),this.depMaps=e&&e.slice(0),this.errback=i,this.inited=!0,this.ignore=r.ignore,r.enabled||this.enabled?this.enable():this.check())},defineDep:function(e,t){this.depMatched[e]||(this.depMatched[e]=!0,this.depCount-=1,this.depExports[e]=t)},fetch:function(){if(!this.fetched){this.fetched=!0,q.startTime=(new Date).getTime();var e=this.map;return this.shim?void q.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],bind(this,function(){return e.prefix?this.callPlugin():this.load()})):e.prefix?this.callPlugin():this.load()}},load:function(){var e=this.map.url;P[e]||(P[e]=!0,q.load(this.map.id,e))},check:function(){if(this.enabled&&!this.enabling){var e,t,i=this.map.id,r=this.depExports,n=this.exports,o=this.factory;if(this.inited){if(this.error)this.emit("error",this.error);else if(!this.defining){if(this.defining=!0,this.depCount<1&&!this.defined){if(isFunction(o)){if(this.events.error&&this.map.isDefine||req.onError!==defaultOnError)try{n=q.execCb(i,o,r,n)}catch(t){e=t}else n=q.execCb(i,o,r,n);if(this.map.isDefine&&void 0===n&&(t=this.module,t?n=t.exports:this.usingExports&&(n=this.exports)),e)return e.requireMap=this.map,e.requireModules=this.map.isDefine?[this.map.id]:null,e.requireType=this.map.isDefine?"define":"require",c(this.error=e)}else n=o;if(this.exports=n,this.map.isDefine&&!this.ignore&&(j[i]=n,req.onResourceLoad)){var a=[];each(this.depMaps,function(e){a.push(e.normalizedMap||e)}),req.onResourceLoad(q,this.map,a)}p(i),this.defined=!0}this.defining=!1,this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else hasProp(q.defQueueMap,i)||this.fetch()}},callPlugin:function(){var e=this.map,t=e.id,r=a(e.prefix);this.depMaps.push(r),u(r,"defined",bind(this,function(r){var n,o,d,f=getOwn(R,this.map.id),l=this.map.name,h=this.map.parentMap?this.map.parentMap.name:null,m=q.makeRequire(e.parentMap,{enableBuildCallback:!0});return this.map.unnormalized?(r.normalize&&(l=r.normalize(l,function(e){return i(e,h,!0)})||""),o=a(e.prefix+"!"+l,this.map.parentMap,!0),u(o,"defined",bind(this,function(e){this.map.normalizedMap=o,this.init([],function(){return e},null,{enabled:!0,ignore:!0})})),d=getOwn(S,o.id),void(d&&(this.depMaps.push(o),this.events.error&&d.on("error",bind(this,function(e){this.emit("error",e)})),d.enable()))):f?(this.map.url=q.nameToUrl(f),void this.load()):(n=bind(this,function(e){this.init([],function(){return e},null,{enabled:!0})}),n.error=bind(this,function(e){this.inited=!0,this.error=e,e.requireModules=[t],eachProp(S,function(e){0===e.map.id.indexOf(t+"_unnormalized")&&p(e.map.id)}),c(e)}),n.fromText=bind(this,function(i,r){var o=e.name,u=a(o),d=useInteractive;r&&(i=r),d&&(useInteractive=!1),s(u),hasProp(y.config,t)&&(y.config[o]=y.config[t]);try{req.exec(i)}catch(e){return c(makeError("fromtexteval","fromText eval for "+t+" failed: "+e,e,[t]))}d&&(useInteractive=!0),this.depMaps.push(u),q.completeLoad(o),m([o],n)}),void r.load(e.name,m,n,y))})),q.enable(r,this),this.pluginMaps[r.id]=r},enable:function(){k[this.map.id]=this,this.enabled=!0,this.enabling=!0,each(this.depMaps,bind(this,function(e,t){var i,r,n;if("string"==typeof e){if(e=a(e,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap),this.depMaps[t]=e,n=getOwn(E,e.id))return void(this.depExports[t]=n(this));this.depCount+=1,u(e,"defined",bind(this,function(e){this.undefed||(this.defineDep(t,e),this.check())})),this.errback?u(e,"error",bind(this,this.errback)):this.events.error&&u(e,"error",bind(this,function(e){this.emit
45("error",e)}))}i=e.id,r=S[i],hasProp(E,i)||!r||r.enabled||q.enable(e,this)})),eachProp(this.pluginMaps,bind(this,function(e){var t=getOwn(S,e.id);t&&!t.enabled&&q.enable(e,this)})),this.enabling=!1,this.check()},on:function(e,t){var i=this.events[e];i||(i=this.events[e]=[]),i.push(t)},emit:function(e,t){each(this.events[e],function(e){e(t)}),"error"===e&&delete this.events[e]}},q={config:y,contextName:e,registry:S,defined:j,urlFetched:P,defQueue:O,defQueueMap:{},Module:b,makeModuleMap:a,nextTick:req.nextTick,onError:c,configure:function(e){if(e.baseUrl&&"/"!==e.baseUrl.charAt(e.baseUrl.length-1)&&(e.baseUrl+="/"),"string"==typeof e.urlArgs){var t=e.urlArgs;e.urlArgs=function(e,i){return(i.indexOf("?")===-1?"?":"&")+t}}var i=y.shim,r={paths:!0,bundles:!0,config:!0,map:!0};eachProp(e,function(e,t){r[t]?(y[t]||(y[t]={}),mixin(y[t],e,!0,!0)):y[t]=e}),e.bundles&&eachProp(e.bundles,function(e,t){each(e,function(e){e!==t&&(R[e]=t)})}),e.shim&&(eachProp(e.shim,function(e,t){isArray(e)&&(e={deps:e}),!e.exports&&!e.init||e.exportsFn||(e.exportsFn=q.makeShimExports(e)),i[t]=e}),y.shim=i),e.packages&&each(e.packages,function(e){var t,i;e="string"==typeof e?{name:e}:e,i=e.name,t=e.location,t&&(y.paths[i]=e.location),y.pkgs[i]=e.name+"/"+(e.main||"main").replace(currDirRegExp,"").replace(jsSuffixRegExp,"")}),eachProp(S,function(e,t){e.inited||e.map.unnormalized||(e.map=a(t,null,!0))}),(e.deps||e.callback)&&q.require(e.deps||[],e.callback)},makeShimExports:function(e){function t(){var t;return e.init&&(t=e.init.apply(global,arguments)),t||e.exports&&getGlobal(e.exports)}return t},makeRequire:function(t,n){function o(i,r,u){var d,p,f;return n.enableBuildCallback&&r&&isFunction(r)&&(r.__requireJsBuild=!0),"string"==typeof i?isFunction(r)?c(makeError("requireargs","Invalid require call"),u):t&&hasProp(E,i)?E[i](S[t.id]):req.get?req.get(q,i,t,o):(p=a(i,t,!1,!0),d=p.id,hasProp(j,d)?j[d]:c(makeError("notloaded",'Module name "'+d+'" has not been loaded yet for context: '+e+(t?"":". Use require([])")))):(v(),q.nextTick(function(){v(),f=s(a(null,t)),f.skipMap=n.skipMap,f.init(i,r,u,{enabled:!0}),l()}),o)}return n=n||{},mixin(o,{isBrowser:isBrowser,toUrl:function(e){var r,n=e.lastIndexOf("."),o=e.split("/")[0],a="."===o||".."===o;return n!==-1&&(!a||n>1)&&(r=e.substring(n,e.length),e=e.substring(0,n)),q.nameToUrl(i(e,t&&t.id,!0),r,!0)},defined:function(e){return hasProp(j,a(e,t,!1,!0).id)},specified:function(e){return e=a(e,t,!1,!0).id,hasProp(j,e)||hasProp(S,e)}}),t||(o.undef=function(e){d();var i=a(e,t,!0),n=getOwn(S,e);n.undefed=!0,r(e),delete j[e],delete P[i.url],delete M[e],eachReverse(O,function(t,i){t[0]===e&&O.splice(i,1)}),delete q.defQueueMap[e],n&&(n.events.defined&&(M[e]=n.events),p(e))}),o},enable:function(e){var t=getOwn(S,e.id);t&&s(e).enable()},completeLoad:function(e){var t,i,r,o=getOwn(y.shim,e)||{},a=o.exports;for(d();O.length;){if(i=O.shift(),null===i[0]){if(i[0]=e,t)break;t=!0}else i[0]===e&&(t=!0);h(i)}if(q.defQueueMap={},r=getOwn(S,e),!t&&!hasProp(j,e)&&r&&!r.inited){if(!(!y.enforceDefine||a&&getGlobal(a)))return n(e)?void 0:c(makeError("nodefine","No define call for "+e,null,[e]));h([e,o.deps||[],o.exportsFn])}l()},nameToUrl:function(e,t,i){var r,n,o,a,s,u,c,d=getOwn(y.pkgs,e);if(d&&(e=d),c=getOwn(R,e))return q.nameToUrl(c,t,i);if(req.jsExtRegExp.test(e))s=e+(t||"");else{for(r=y.paths,n=e.split("/"),o=n.length;o>0;o-=1)if(a=n.slice(0,o).join("/"),u=getOwn(r,a)){isArray(u)&&(u=u[0]),n.splice(0,o,u);break}s=n.join("/"),s+=t||(/^data\:|^blob\:|\?/.test(s)||i?"":".js"),s=("/"===s.charAt(0)||s.match(/^[\w\+\.\-]+:/)?"":y.baseUrl)+s}return y.urlArgs&&!/^blob\:/.test(s)?s+y.urlArgs(e,s):s},load:function(e,t){req.load(q,e,t)},execCb:function(e,t,i,r){return t.apply(r,i)},onScriptLoad:function(e){if("load"===e.type||readyRegExp.test((e.currentTarget||e.srcElement).readyState)){interactiveScript=null;var t=g(e);q.completeLoad(t.id)}},onScriptError:function(e){var t=g(e);if(!n(t.id)){var i=[];return eachProp(S,function(e,r){0!==r.indexOf("_@r")&&each(e.depMaps,function(e){if(e.id===t.id)return i.push(r),!0})}),c(makeError("scripterror",'Script error for "'+t.id+(i.length?'", needed by: '+i.join(", "):'"'),e,[t.id]))}}},q.require=q.makeRequire(),q}function getInteractiveScript(){return interactiveScript&&"interactive"===interactiveScript.readyState?interactiveScript:(eachReverse(scripts(),function(e){if("interactive"===e.readyState)return interactiveScript=e}),interactiveScript)}var req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath,version="2.3.3",commentRegExp=/\/\*[\s\S]*?\*\/|([^:"'=]|^)\/\/.*$/gm,cjsRequireRegExp=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,jsSuffixRegExp=/\.js$/,currDirRegExp=/^\.\//,op=Object.prototype,ostring=op.toString,hasOwn=op.hasOwnProperty,isBrowser=!("undefined"==typeof window||"undefined"==typeof navigator||!window.document),isWebWorker=!isBrowser&&"undefined"!=typeof importScripts,readyRegExp=isBrowser&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,defContextName="_",isOpera="undefined"!=typeof opera&&"[object Opera]"===opera.toString(),contexts={},cfg={},globalDefQueue=[],useInteractive=!1;if("undefined"==typeof define){if("undefined"!=typeof requirejs){if(isFunction(requirejs))return;cfg=requirejs,requirejs=void 0}"undefined"==typeof require||isFunction(require)||(cfg=require,require=void 0),req=requirejs=function(e,t,i,r){var n,o,a=defContextName;return isArray(e)||"string"==typeof e||(o=e,isArray(t)?(e=t,t=i,i=r):e=[]),o&&o.context&&(a=o.context),n=getOwn(contexts,a),n||(n=contexts[a]=req.s.newContext(a)),o&&n.configure(o),n.require(e,t,i)},req.config=function(e){return req(e)},req.nextTick="undefined"!=typeof setTimeout?function(e){setTimeout(e,4)}:function(e){e()}
45,require||(require=req),req.version=version,req.jsExtRegExp=/^\/|:|\?|\.js$/,req.isBrowser=isBrowser,s=req.s={contexts:contexts,newContext:newContext},req({}),each(["toUrl","undef","defined","specified"],function(e){req[e]=function(){var t=contexts[defContextName];return t.require[e].apply(t,arguments)}}),isBrowser&&(head=s.head=document.getElementsByTagName("head")[0],baseElement=document.getElementsByTagName("base")[0],baseElement&&(head=s.head=baseElement.parentNode)),req.onError=defaultOnError,req.createNode=function(e,t,i){var r=e.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");return r.type=e.scriptType||"text/javascript",r.charset="utf-8",r.async=!0,r},req.load=function(e,t,i){var r,n=e&&e.config||{};if(isBrowser)return r=req.createNode(n,t,i),r.setAttribute("data-requirecontext",e.contextName),r.setAttribute("data-requiremodule",t),!r.attachEvent||r.attachEvent.toString&&r.attachEvent.toString().indexOf("[native code")<0||isOpera?(r.addEventListener("load",e.onScriptLoad,!1),r.addEventListener("error",e.onScriptError,!1)):(useInteractive=!0,r.attachEvent("onreadystatechange",e.onScriptLoad)),r.src=i,n.onNodeCreated&&n.onNodeCreated(r,n,t,i),currentlyAddingScript=r,baseElement?head.insertBefore(r,baseElement):head.appendChild(r),currentlyAddingScript=null,r;if(isWebWorker)try{setTimeout(function(){},0),importScripts(i),e.completeLoad(t)}catch(r){e.onError(makeError("importscripts","importScripts failed for "+t+" at "+i,r,[t]))}},isBrowser&&!cfg.skipDataMain&&eachReverse(scripts(),function(e){if(head||(head=e.parentNode),dataMain=e.getAttribute("data-main"))return mainScript=dataMain,cfg.baseUrl||mainScript.indexOf("!")!==-1||(src=mainScript.split("/"),mainScript=src.pop(),subPath=src.length?src.join("/")+"/":"./",cfg.baseUrl=subPath),mainScript=mainScript.replace(jsSuffixRegExp,""),req.jsExtRegExp.test(mainScript)&&(mainScript=dataMain),cfg.deps=cfg.deps?cfg.deps.concat(mainScript):[mainScript],!0}),define=function(e,t,i){var r,n;"string"!=typeof e&&(i=t,t=e,e=null),isArray(t)||(i=t,t=null),!t&&isFunction(i)&&(t=[],i.length&&(i.toString().replace(commentRegExp,commentReplace).replace(cjsRequireRegExp,function(e,i){t.push(i)}),t=(1===i.length?["require"]:["require","exports","module"]).concat(t))),useInteractive&&(r=currentlyAddingScript||getInteractiveScript(),r&&(e||(e=r.getAttribute("data-requiremodule")),n=contexts[r.getAttribute("data-requirecontext")])),n?(n.defQueue.push([e,t,i]),n.defQueueMap[e]=!0):globalDefQueue.push([e,t,i])},define.amd={jQuery:!0},req.exec=function(text){return eval(text)},req(cfg)}}(this,"undefined"==typeof setTimeout?void 0:setTimeout);</script>
45<script type="text/javascript"> 46 var requireConfig = {"waitSeconds":20,"baseUrl":"https:\/\/d1mlo4htassgww.cloudfront.net\/shipyard\/build\/","paths":{"async":"profiles\/default","bootstrap":"profiles\/default","goog":"profiles\/default","jquery":"profiles\/default","jquery.browser":"profiles\/default","jquery.deparam":"profiles\/default","jquery.dropdownchecklist":"profiles\/default","jquery.form":"profiles\/default","jquery.history":"profiles\/default","jquery.html5-placeholder-shim":"profiles\/default","jquery.inview":"profiles\/default","jquery.usmNlsShipyard":"profiles\/default","jquery.pageitems":"profiles\/default","jquery.usmajaxtogglebutton":"profiles\/default","jquery.usmmortgageestimate":"profiles\/default","jquery.usmtruncate":"profiles\/default","jquery.validation":"profiles\/default","jquery.validation-extensions-usm":"profiles\/default","jqueryui":"profiles\/default","knockout":"knockout-2.3.0","owlcarousel":"profiles\/default","picturefill.min":"profiles\/default","propertyParser":"profiles\/default","shim.polyfills":"profiles\/default","captcha":"profiles\/default","shipyard":"profiles\/default","static-map-search":"profiles\/default","usm":"profiles\/default","usm.analytics":"profiles\/default","usm.cookie":"profiles\/default","usm.url":"profiles\/default","usm.user":"profiles\/default","usm.favorite":"profiles\/default","usm.savesearch":"profiles\/default","usm.modalform":"profiles\/default","usm.dynamicsearch":"profiles\/default","LLSDKsJS":"https:\/\/sdk.locallogic.co\/sdks-js\/1.19.30\/index.umd","webfontloader":"\/\/ajax.googleapis.com\/ajax\/libs\/webfont\/1\/webfont","Leaflet":"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/leaflet\/1.0.1\/leaflet","mapboxgl":"https:\/\/api.tiles.mapbox.com\/mapbox-gl-js\/v0.42.0\/mapbox-gl","plunk":"plunkComponents.min","emblaCarousel":"https:\/\/unpkg.com\/[email protected]\/embla-carousel.umd","emblaCarouselAutoplay":"https:\/\/unpkg.com\/[email protected]\/embla-carousel-autoplay.umd","emblaCarouselClassNames":"https:\/\/unpkg.com\/[email protected]\/embla-carousel-class-names.umd","emblaCarouselFade":"https:\/\/unpkg.com\/[email protected]\/embla-carousel-fade.umd","emblaCarouselPlugins":"emblaCarouselPlugins","map.regions":"\/realestate\/regions\/?json","jquery.validationextensionsusm":"\/data\/shipyard\/js\/jquery.validation-extensions-usm","jquery.usmmortgageestimate?version=1717487422":"https:\/\/d1mlo4htassgww.cloudfront.net\/shipyard\/js\/jquery.usmmortgageestimate?version=1717487422"}}; 47 requireConfig.urlArgs = function(id, url) { 48 var args = ""; 49 if (url.indexOf("d1nn5t56all1qd") <= 0 && url.indexOf("dy0meowegjlo2") <= 0) { 50 args = "version=1791562486"; 51 return (url.indexOf("?") === -1 ? "?" : "&") + args; 52 } 53 54 return ""; 55 }; 56 57 require.config(requireConfig); 58 </script>
58 59
59<script type="text/javascript">require(["profiles/default", "usm", "usm.calltracking", "usm.goscript"], function (listing, usm) { 60 if (usm.touchSupport) { require(["profiles/touch"]); } 61 });</script>
vendor: 73 bytes, line 61
61<script async src="https://www.google.com/recaptcha/enterprise.js?render=
616LeGUJEpAAAAANAraaN9hibE29n3m1fryM8cPetQ
vendor: 24 bytes, lines 61-62
61"></script> 62
62<link rel="preconnect" href="https://www.google.com"> 63 <link rel="preconnect" href="https://www.gstatic.com" crossorigin> 64</head> 65�<body class="login array1-user array1-login fall" data-site-type="shipyard" data-re-captcha-site-key="6LeGUJEpAAAAANAraaN9hibE29n3m1fryM8cPetQ"> 66�<!-- Google Tag Manager (noscript) -->
vendor: 63 bytes, lines 66-67
66 67�<noscript><iframe src="//www.googletagmanager.com/ns.html?id=
67GTM-NR38L3C
vendor: 84 bytes, lines 67-68
67" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 68�
68<!-- End Google Tag Manager (noscript) --> 69�<div class="utilBarWrap"> 70 <aside id="sidebar3"><div id="image-294079" class="widget image container"><a href="/" target="_self"><img src="https://d3w216np43fnr4.cloudfront.net/9775/294079/1.png?version=1717415827" alt="Sargent Real Estate logo" width="173" height="56"/></a></div><div id="menuwidget-293942" class="widget menu menuwidget default-nav container"><h3 class="widget-title">Menu</h3><div class="widget-inner"><div class="desktop-nav"><div class="navbar-wrapper"><nav class="navbar navbar-default" role="navigation"><div id="navbar-293942"><ul class="nav navbar-nav site-nav" role="menubar"><li role="presentation" class="has-children menu-item-162940"><a target="_self" rel="noopener" data-toggle="dropdown" data-target="sub-menu-162940" class="dropdown-toggle" role="menuitem">Property<span class="caret"></span></a><ul class="dropdown-menu" id="sub-menu-162940" role="menu"><li role="presentation" class=" menu-item-162962"><a href="/listings/" target="_self" role="menuitem">All Listings</a></li><li role="presentation" class=" menu-item-162963"><a href="/real-estate/our-listings/" target="_self" role="menuitem">Our Listings</a></li><li role="presentation" class=" menu-item-162964"><a href="/sold-listings/" target="_self" role="menuitem">Sold Listings</a></li></ul></li><li role="presentation" class="has-children menu-item-162941"><a target="_self" rel="noopener" data-toggle="dropdown" data-target="sub-menu-162941" class="dropdown-toggle" role="menuitem">Services<span class="caret"></span></a><ul class="dropdown-menu" id="sub-menu-162941" role="menu"><li role="presentation" class=" menu-item-162965"><a href="/buyers/" target="_self" role="menuitem">Buyers</a></li><li role="presentation" class=" menu-item-162966"><a href="/sellers/" target="_self" role="menuitem">Sellers</a></li><li role="presentation" class=" menu-item-162968"><a href="/sellers/market-analysis/" target="_self" role="menuitem">Market Analysis</a></li></ul></li><li role="presentation" class=" menu-item-162942"><a href="/community/all-communities/" target="_self" role="menuitem">Communities</a></li><li role="presentation" class="has-children menu-item-162945"><a href="#" target="_self" rel="noopener" data-toggle="dropdown" data-target="sub-menu-162945" class="dropdown-toggle" role="menuitem">About Us<span class="caret"></span></a><ul class="dropdown-menu" id="sub-menu-162945" role="menu"><li role="presentation" class=" menu-item-162948"><a href="/our-agents/" target="_self" role="menuitem">Meet the Team</a></li><li role="presentation" class=" menu-item-162949"><a href="/testimonials/" target="_self" role="menuitem">Testimonials</a></li></ul></li><li role="presentation" class=" menu-item-162946"><a href="/contact-us/" target="_self" role="menuitem">Contact</a></li></ul></div></nav></div></div><div class="mobile-nav"><button type="button" class="navbar-toggle" data-target="#navbar-mobile-293942" aria-label="Toggle navigation"><span>Menu</span><span class="fa fa-bar"></span><span class="fa fa-bar"></span><span class="fa fa-bar"></span></button><div class="navbar-wrapper"><nav class="navbar navbar-default" role="navigation"><div id="navbar-mobile-293942"><a href="#" class="menu-close"><i class="fa fa-times-circle-o"></i><span class="sr-only">Close Button</span></a><div class="menu-sign-on"><a class="usm-btn nav-login" href="/user/login/" rel="nofollow">Log In</a><a class="usm-btn nav-register" href="/user/register/" rel="nofollow">Sign Up</a><a class="usm-btn nav-account" href="/user/" rel="nofollow">My Account</a></div><ul class="nav navbar-nav site-nav" role="menubar"><li role="presentation" class="has-children menu-item-162940"><a target="_self" rel="noopener" data-toggle="dropdown" data-target="mobile-sub-menu-162940" class="dropdown-toggle" role="menuitem">Property<span class="caret"></span></a><ul class="dropdown-menu" id="mobile-sub-menu-162940" role="menu"><li role="presentation" class=" menu-item-162962"><a href="/listings/" target="_self" role="menuitem">All Listings</a></li><li role="presentation" class=" menu-item-162963"><a href="/real-estate/our-listings/" target="_self" role="menuitem">Our Listings</a></li><li role="presentation" class=" menu-item-162964"><a href="/sold-listings/" target="_self" role="menuitem">Sold Listings</a></li></ul></li><li role="presentation" class="has-children menu-item-162941"><a target="_self" rel="noopener" data-toggle="dropdown" data-target="mobile-sub-menu-162941" class="dropdown-toggle" role="menuitem">Services<span class="caret"></span></a><ul class="dropdown-menu" id="mobile-sub-menu-162941" role="menu"><li role="presentation" class=" menu-item-162965"><a href="/buyers/" target="_self" role="menuitem">Buyers</a></li><li role="presentation" class=" menu-item-162966"><a href="/sellers/" target="_self" role="menuitem">Sellers</a></li><li role="presentation" class=" menu-item-162968"><a href="/sellers/market-analysis/" target="_self" role="menuitem">Market Analysis</a></li></ul></li><li role="presentation" class=" menu-item-162942"><a href="/community/all-communities/" target="_self" role="menuitem">Communities</a></li><li role="presentation" class="has-children menu-item-162945"><a href="#" target="_self" rel="noopener" data-toggle="dropdown" data-target="mobile-sub-menu-162945" class="dropdown-toggle" role="menuitem">About Us<span class="caret"></span></a><ul class="dropdown-menu" id="mobile-sub-menu-162945" role="menu"><li role="presentation" class=" menu-item-162948"><a href="/our-agents/" target="_self" role="menuitem">Meet the Team</a></li><li role="presentation" class=" menu-item-162949"><a href="/testimonials/" target="_self" role="menuitem">Testimonials</a></li></ul></li><li role="presentation" class=" menu-item-162946"><a href="/contact-us/" target="_self" role="menuitem">Contact</a></li></ul><ul class="nav navbar-nav user-nav"><li class="menu-item-saved-search" role="presentation"><a href="/realestate/searches/" rel="nofollow">Saved Searches</a></li><li class="menu-item-favorites" role="presentation"><a href="/realestate/favorites/view/" rel="nofollow">Favorites</a></li></ul></div></nav></div></div></div></div><div class="top-header-links"> 71 <div class="header-user"> 72 <div class="header-user-logged-in"> 73 <div class="account-link"><a href="/user/" rel="nofollow">Account</a></div> 74 </div> 75 <div class="header-user-logged-out"> 76 <div class="header-user-register"> 77 <div class="register-link"><a href="/user/register/" rel="nofollow">Sign Up</a></div> 78 </div>
79 <span> or </span> 80 <div class="header-user-login"> 81 <div class="login-link"><a href="/user/login/" rel="nofollow">Log In</a></div> 82 </div> 83 </div> 84 </div> 85 <a href="tel:207-667-2144" aria-label="Phone Number" class="contact-link-phone"><i class="fa-solid fa-phone"></i> 207-667-2144</a> 86</div><div id="menuwidget-294069" class="widget menu menuwidget default-nav container"><h3 class="widget-title">Hamburger Menu</h3><div class="widget-inner"><div class="desktop-nav"><div class="navbar-wrapper"><nav class="navbar navbar-default" role="navigation"><div id="navbar-294069"><ul class="nav navbar-nav site-nav" role="menubar"><li role="presentation" class="has-children menu-item-162940"><a target="_self" rel="noopener" data-toggle="dropdown" data-target="sub-menu-162940" class="dropdown-toggle" role="menuitem">Property<span class="caret"></span></a><ul class="dropdown-menu" id="sub-menu-162940" role="menu"><li role="presentation" class=" menu-item-162962"><a href="/listings/" target="_self" role="menuitem">All Listings</a></li><li role="presentation" class=" menu-item-162963"><a href="/real-estate/our-listings/" target="_self" role="menuitem">Our Listings</a></li><li role="presentation" class=" menu-item-162964"><a href="/sold-listings/" target="_self" role="menuitem">Sold Listings</a></li></ul></li><li role="presentation" class="has-children menu-item-162941"><a target="_self" rel="noopener" data-toggle="dropdown" data-target="sub-menu-162941" class="dropdown-toggle" role="menuitem">Services<span class="caret"></span></a><ul class="dropdown-menu" id="sub-menu-162941" role="menu"><li role="presentation" class=" menu-item-162965"><a href="/buyers/" target="_self" role="menuitem">Buyers</a></li><li role="presentation" class=" menu-item-162966"><a href="/sellers/" target="_self" role="menuitem">Sellers</a></li><li role="presentation" class=" menu-item-162968"><a href="/sellers/market-analysis/" target="_self" role="menuitem">Market Analysis</a></li></ul></li><li role="presentation" class=" menu-item-162942"><a href="/community/all-communities/" target="_self" role="menuitem">Communities</a></li><li role="presentation" class="has-children menu-item-162945"><a href="#" target="_self" rel="noopener" data-toggle="dropdown" data-target="sub-menu-162945" class="dropdown-toggle" role="menuitem">About Us<span class="caret"></span></a><ul class="dropdown-menu" id="sub-menu-162945" role="menu"><li role="presentation" class=" menu-item-162948"><a href="/our-agents/" target="_self" role="menuitem">Meet the Team</a></li><li role="presentation" class=" menu-item-162949"><a href="/testimonials/" target="_self" role="menuitem">Testimonials</a></li></ul></li><li role="presentation" class=" menu-item-162946"><a href="/contact-us/" target="_self" role="menuitem">Contact</a></li></ul></div></nav></div></div><div class="mobile-nav"><button type="button" class="navbar-toggle" data-target="#navbar-mobile-294069" aria-label="Toggle navigation"><span>Menu</span><span class="fa fa-bar"></span><span class="fa fa-bar"></span><span class="fa fa-bar"></span></button><div class="navbar-wrapper"><nav class="navbar navbar-default" role="navigation"><div id="navbar-mobile-294069"><a href="#" class="menu-close"><i class="fa fa-times-circle-o"></i><span class="sr-only">Close Button</span></a><div class="menu-sign-on"><a class="usm-btn nav-login" href="/user/login/" rel="nofollow">Log In</a><a class="usm-btn nav-register" href="/user/register/" rel="nofollow">Sign Up</a><a class="usm-btn nav-account" href="/user/" rel="nofollow">My Account</a></div><ul class="nav navbar-nav site-nav" role="menubar"><li role="presentation" class="has-children menu-item-162940"><a target="_self" rel="noopener" data-toggle="dropdown" data-target="mobile-sub-menu-162940" class="dropdown-toggle" role="menuitem">Property<span class="caret"></span></a><ul class="dropdown-menu" id="mobile-sub-menu-162940" role="menu"><li role="presentation" class=" menu-item-162962"><a href="/listings/" target="_self" role="menuitem">All Listings</a></li><li role="presentation" class=" menu-item-162963"><a href="/real-estate/our-listings/" target="_self" role="menuitem">Our Listings</a></li><li role="presentation" class=" menu-item-162964"><a href="/sold-listings/" target="_self" role="menuitem">Sold Listings</a></li></ul></li><li role="presentation" class="has-children menu-item-162941"><a target="_self" rel="noopener" data-toggle="dropdown" data-target="mobile-sub-menu-162941" class="dropdown-toggle" role="menuitem">Services<span class="caret"></span></a><ul class="dropdown-menu" id="mobile-sub-menu-162941" role="menu"><li role="presentation" class=" menu-item-162965"><a href="/buyers/" target="_self" role="menuitem">Buyers</a></li><li role="presentation" class=" menu-item-162966"><a href="/sellers/" target="_self" role="menuitem">Sellers</a></li><li role="presentation" class=" menu-item-162968"><a href="/sellers/market-analysis/" target="_self" role="menuitem">Market Analysis</a></li></ul></li><li role="presentation" class=" menu-item-162942"><a href="/community/all-communities/" target="_self" role="menuitem">Communities</a></li><li role="presentation" class="has-children menu-item-162945"><a href="#" target="_self" rel="noopener" data-toggle="dropdown" data-target="mobile-sub-menu-162945" class="dropdown-toggle" role="menuitem">About Us<span class="caret"></span></a><ul class="dropdown-menu" id="mobile-sub-menu-162945" role="menu"><li role="presentation" class=" menu-item-162948"><a href="/our-agents/" target="_self" role="menuitem">Meet the Team</a></li><li role="presentation" class=" menu-item-162949"><a href="/testimonials/" target="_self" role="menuitem">Testimonials</a></li></ul></li><li role="presentation" class=" menu-item-162946"><a href="/contact-us/" target="_self" role="menuitem">Contact</a></li></ul><div class="navbar-phone"><a href="tel:207-667-2144"><i class="fas fa-phone-alt"></i>207-667-2144</a></div><ul class="nav navbar-nav user-nav"><li class="menu-item-saved-search" role="presentation"><a href="/realestate/searches/" rel="nofollow">Saved Searches</a></li><li class="menu-item-favorites" role="presentation"><a href="/realestate/favorites/view/" rel="nofollow">Favorites</a></li></ul></div></nav></div></div></div></div></aside> 87</div> 88<div class="topWrap"> 89 <aside id="top"><div id="slideshow-293941" class="widget slideshow container"><div class="slideshow-wrapper" id="carousel-293941"><div class="carousel slide"><div class="carousel-inner"><div class="item active"><img alt="Forest with river" fetchpriority="high" src="https://d3w216np43fnr4.cloudfront.net/1920x1080/9775/293941/1.jpg?version=1717413844" srcset="https://d3w216np43fnr4.cloudfront.net/320x320/9775/293941/1.jpg?version=1717413842 320w, https://d3w216np43fnr4.cloudfront.net/750x750/9775/293941/1.jpg?version=1717413842 750w, https://d3w216np43fnr4.cloudfront.net/970x970/9775/293941/1.jpg?version=1717413841 970w, https://d3w216np43fnr4.cloudfront.net/1170x1170/9775/293941/1.jpg?version=1717413842 1170w, https://d3w216np43fnr4.cloudfront.net/1920x1080/9775/293941/1.jpg?version=1717413844 1920w"/></div></div></div></div></div><div id="autosuggestionsearch-293995" class="widget autosuggestionsearch container"><div class="autosuggest widget-autosuggest"><div class="widget-inner"><form action="/listings/" method="get"><div class="autosuggest-title" id="autosuggest-title"><h3 class="widget-title">Buy Maine</h3></div><div class="autosuggest-searchbar"><input type="search" placeholder="Search homes by address, city, ZIP code and more" aria-label=" Search: Search homes by address, city, ZIP code and more Use Up and Down to choose options, press Enter to select the currently focused option, press Escape to exit the menu, press Tab to select the option and exit the menu. " autocomplete="off" name="autosuggest-search-query" id="autosuggest-search-query-293995" maxlength="200" class="search-input form-control"/><div class="buttons"><div class="autosuggest-loader"></div><button class="usm-btn btn-search" id="autosuggest-search-button" role="button" aria-label="Search"><i class="fa fa-search"></i></button></div></div><div class="autosuggest-links"><div class="col-links"></div></div></form></div></div></div></aside> 90</div> 91<div class="sub1Wrap"> 92 <aside id="group1"></aside> 93</div> 94<div class="sub2Wrap"> 95 <aside id="group2"></aside> 96</div> 97<div id="wrapper"> 98 <div class="content-row"> 99 <div class="contentWrap"> 100 <main> 101 102 103<section class="login-wrap {parentClass}"> 104 <h1>Sign In</h1> 105 106 <div class="login-left-wrap"> 107 <div class="user-login-messages"> 108 109 </div> 110 111 <div class="social-opt-in-question"> 112 113 </div> 114 115 116 <div class="google-login"> 117 118 <style type="text/css"> 119 .google-auth { 120 margin-bottom: 15px; 121 } 122 .google-auth iframe, 123 .google-auth div div div { 124 margin: 0 auto !important; 125 } 126 .question-merge-google-account { 127 text-align: center; 128 } 129 .question-merge-google-account .alert-title { 130 margin-bottom: 15px; 131 } 132 .question-merge-google-account form { 133 display: inline-block; 134 margin-right: 15px; 135 } 136 </style> 137
137<script src="https://accounts.google.com/gsi/client" async defer></script>
137 138
138<script type="text/javascript"> 139 require(["jquery", "usm", "usm.modalform"], function ($, usm) { 140 // Dynamic protocol instead of hardcoded https: - the button only renders 141 // when SSL is on in production, but hardcoding https would break plain-http 142 // local/dev domains. 143 var loginUri = window.location.protocol + "//www.sargentre.com/user/login/login/"; 144 145 function submitCredentialForm(credential) { 146 var $form = $("<form>", {method: "POST", action: loginUri}) 147 .append($("<input>", {type: "hidden", name: "credential", value: credential})); 148 $("body").append($form); 149 $form.trigger("submit"); 150 } 151 152 function handleCredentialResponse(response) { 153 var $button = $("#googleAuth8211"); 154 var $loginPopup = $button.closest(".login-popup"); 155 156 if (!$loginPopup.length) { 157 submitCredentialForm(response.credential); 158 return; 159 } 160 161 $.ajax({ 162 type: "POST", 163 url: loginUri, 164 data: {credential: response.credential}, 165 dataType: "json" 166 }).done(function (data) { 167 if (data && data.action === "html") { 168 usm.modalForm.showSocialOptIn($loginPopup, data.html); 169 } else if (data && data.action === "redirect") { 170 submitCredentialForm(response.credential); 171 } else { 172 usm.modalForm.revealSuccess($loginPopup); 173 } 174 }).fail(function (xhr) { 175 usm.modalForm.showSocialError($loginPopup, xhr); 176 }); 177 } 178 179 function googleAuthInit() { 180 google.accounts.id.initialize({ 181 client_id: "226207318787-bh1nrbdlf38hp1m9rqaedkjj7vdihj8v.apps.googleusercontent.com", 182 context: "signin", 183 callback: handleCredentialResponse 184 }); 185 google.accounts.id.prompt(); 186 google.accounts.id.renderButton(document.getElementById("googleAuth8211"), { 187 type: "standard", 188 shape: "pill", 189 theme: "outline", 190 text: "signin_with", 191 size: "large", 192 locale: "en-US", 193 logo_alignment: "left", 194 width: 288 195 }); 196 } 197 198 // onGoogleLibraryLoad only fires once per page; if GSI already loaded 199 // (e.g. the modal opened after a full page load), assigning it here 200 // would never fire, so init directly instead. 201 if (window.google && window.google.accounts && window.google.accounts.id) { 202 googleAuthInit(); 203 } else { 204 window.onGoogleLibraryLoad = googleAuthInit; 205 } 206 }); 207 </script>
207 208 <div class="google-wrapper"><div class="button-wrapper"><div id="googleAuth8211" class="google-auth"></div></div></div> 209 </div> 210 211 <div class="facebook-login"> 212
212<script type="text/javascript">require(["jquery", "jqueryui", "usm", "usm.modalform"], function ($, jqueryui, usm) { 213 var appId = 4029847067250472; 214 /* Init FB */ 215 window.fbAsyncInit = function() { 216 FB.init({ 217 appId : appId, 218 cookie : true, // enable cookies to allow the server to access the session 219 xfbml : true, // parse social plugins on this page 220 version : "v2.5" // use graph api version 2.5 221 }); 222 }; 223 224 // Load the SDK asynchronously 225 (function(d, s, id) { 226 var js, fjs = d.getElementsByTagName(s)[0]; 227 if (d.getElementById(id)) return; 228 js = d.createElement(s); js.id = id; 229 js.src = "//connect.facebook.net/en_US/sdk.js"; 230 fjs.parentNode.insertBefore(js, fjs); 231 }(document, "script", "facebook-jssdk")); 232 233 $(".facebook-action").on("click", function (e) { 234 var $this = $(this); 235 236 /* Find closest facebook form to submit. */ 237 var $fbForm = $this.closest(".facebook-wrapper").find(".facebook-form"); 238 239 FB.login(function (response) { 240 FB.getLoginStatus(function (response) { 241 statusChangeCallback(response, $fbForm); 242 }); 243 }, {scope: "public_profile,email"}); 244 }); 245 246 function statusChangeCallback(response, facebookForm) { 247 if (response.status === "connected") { 248 var $loginPopup = facebookForm.closest(".login-popup"); 249 250 if ($loginPopup.length) { 251 facebookForm.ajaxSubmit({ 252 dataType: "json", 253 success: function (data) { 254 if (data && data.action === "html") { 255 usm.modalForm.showSocialOptIn($loginPopup, data.html); 256 } else if (data && data.action === "redirect") { 257 facebookForm.get(0).submit(); 258 } else { 259 usm.modalForm.revealSuccess($loginPopup); 260 } 261 }, 262 error: function (xhr) { 263 usm.modalForm.showSocialError($loginPopup, xhr); 264 } 265 }); 266 } else { 267 facebookForm.submit(); 268 } 269 } else { 270 $(".facebook-info").html("Something went wrong. Please try again."); 271 } 272 } 273 }); 274 </script>
274<div class="facebook-wrapper"><div class="button-wrapper"><div><a class="btn btn-block btn-social btn-facebook facebook-action"><span class="social-icon"><i class="fa fa-facebook-official"></i></span><span class="button-text">Sign In with Facebook</span><i class="fa fa-angle-right"></i></a></div><br/><div class="or-text"><p>Or sign in with your email and password <i class="fa fa-angle-down"></i></p></div></div><div class="fields-wrapper" style="display: none"><form method="post" action="/user/login/login/" class="facebook-form social-login-form"><input name="SocialLogin" id="SocialLogin" value="Facebook" type="hidden" class="form-control"/><div class="form-group"><label for="Email">Email Address</label><input name="Email" id="Email" type="email" class="form-control"/></div><div class="form-group"><label for="FirstName">First Name</label><input name="FirstName" id="FirstName" type="text" class="form-control"/></div><div class="form-group"><label for="LastName">Last Name</label><input name="LastName" id="LastName" type="text" class="form-control"/></div><input type="submit" name="Submit" id="Submit" value="Submit" class="submit"/></form></div><div class="facebook-info"></div></div> 275 </div> 276 277 <div id="login"> 278 <form method="post" action="/user/login/login/" id="login-form" class="bootstrap-validate" role="form"> 279 <div class="form-group"> 280 <label for="Username">Email</label> 281 <input type="text" name="Username" class="form-control username required" id="UserName" placeholder="*ex: [email protected]" /> 282 </div> 283 <div class="form-group"> 284 <label for="Password">Password</label> 285 <input type="password" name="Password" class="form-control password required" id="Password" placeholder="Your Password" autocomplete="new-password" /> 286 </div> 287 288 289 <div class="submit-section"> 290 <div class="form-group login-submit-group"> 291 <button name="send" id="user-login" type="submit" class="btn usm-btn btn-default submit" tabindex="10" value="Sign In">Sign In</button> 292 <a href="/user/forgot/?RedirectURL=/user/" class="forgot-password">Forgot password?</a> 293 </div> 294 295 <div class="account-group"> 296 <div class="text-center log-bottom"> 297 <div class="log-bottom-left">Don't have an account yet?</div> 298 <div class="log-bottom-right"> 299 <a href="/user/register/?RedirectURL=%2Fuser%2F" id="modal-register" class="btn register-link"> 300 <span> 301 <i class="fa fa-user"></i> 302 </span> 303 Sign Up 304 </a> 305 </div> 306 </div> 307 </div> 308 </div> 309 310 <input type="hidden" name="RedirectURL" value="/user/" /> 311 </form> 312 </div> 313 314 </div> 315</section> 316
317<script type="text/javascript"> 318 require(["jquery", "shipyard"], function($, shipyard) { 319 shipyard.validateForm($('.bootstrap-validate')); 320 }); 321</script>
321 322</main> 323 <aside id="sidebar1"></aside> 324 </div> 325 </div> 326</div> 327<div class="sub3Wrap"> 328 <aside id="group3"></aside> 329</div> 330<div class="sub4Wrap"> 331 <aside id="group4"><div id="widget-ask-294075" class="widget askaquestion niceform container"><div class="widget-inner"><h3 class="widget-title">Send A Message</h3><div class="error-message-container"></div><form method="POST" action="/mail/send/sidebar_ask_a_question/" id="aaq-294075" data-pageview="/complete/ask-a-question/"><div><h4></h4><div class="contact-info"></div></div><div class="form-group form-group-firstname"><label class="sr-only" for="ask-294075-firstname">First Name</label><input type="text" name="FirstName" class="required form-control" placeholder="*First Name" id="ask-294075-firstname" required="required"/></div><div class="form-group form-group-lastname"><label class="sr-only" for="ask-294075-lastname">Last Name</label><input type="text" name="LastName" class="required form-control" placeholder="*Last Name" id="ask-294075-lastname" required="required"/></div><div class="form-group form-group-email"><label class="sr-only" for="ask-294075-email">Email</label><input type="text" name="Email" class="required form-control email" placeholder="*Email Address" id="ask-294075-email" required="required"/></div><div class="form-group form-group-phone"><label class="sr-only" for="ask-294075-phone">Phone</label><input type="text" name="Phone" class="form-control phone " placeholder="Phone" id="ask-294075-phone"/></div><div class="form-group form-group-comments"><label class="sr-only" for="ask-294075-question">Questions or Comments?</label><textarea name="Comments" id="ask-294075-question" class="form-control required" placeholder="*Questions or Comments" cols="12" rows="7"></textarea></div><div style="display:none;">Do not fill in this field:<input type="text" name="topyenoh" id="topyenoh"/></div><input type="hidden" name="g-recaptcha-response" id="g-recaptcha-response" value="initalize" class="g-recaptcha-response"/><input type="hidden" name="FormKey" id="FormKey" value="40a8853ebfeba4230bbc6266f7bad2a0"/><input type="hidden" name="Sent From" id="Sent From" value="https://www.sargentre.com/user/login/"/><input type="hidden" name="mailformid" id="mailformid" value="sidebar_ask_a_question"/><input type="hidden" name="Sent_Form" id="Sent_Form" value="sidebar_ask_a_question"/><input type="hidden" name="RealtorID" id="RealtorID" title="RealtorID"/><div class="form-group opt-in-block"><label class="show"><input type="checkbox" name="OptIn" value="1" class="required" required="required"/><span class="control-label">Opt in</span></label><p>I agree to receive marketing and customer service calls and text messages from Sargent Real Estate. To opt out, you can reply 'stop' at any time or click the unsubscribe link in the emails. Consent is not a condition of purchase. Msg/data rates may apply. Msg frequency varies. <a href="/privacy-policy/">Privacy Policy</a>.</p></div><div class="submit-btn"><button type="submit" name="send" class="usm-btn">Send</button></div><div class="recaptcha-notice">This site is protected by reCAPTCHA and the Google <a href="https://policies.google.com/privacy">Privacy Policy</a> and <a href="https://policies.google.com/terms">Terms of Service</a> apply.</div></form></div></div><div id="recsearch-293916" class="widget recsearchlist recsearch recommendedsearchlist tabbed container"><h3 class="widget-title">Recommended Searches</h3><div class="widget-inner"><ul class="nav nav-tabs"><li class="active recsearch-category-agent-listings"><a href="#tab-34572" data-toggle="tab">Agent Listings</a></li><li class="recsearch-category-price"><a href="#tab-34634" data-toggle="tab">Price</a></li><li class="recsearch-category-property-type"><a href="#tab-34635" data-toggle="tab">Property Type</a></li><li class="recsearch-category-popular-searches"><a href="#tab-34609" data-toggle="tab">Popular Searches</a></li></ul><div class="tab-content"><div class="tab-pane active" id="tab-34572"><ul class="category-searches"><li><a title="Listings for Amy Griffin" href="/listings/agent/amy-griffin/">Listings for Amy Griffin</a></li><li><a title="Listings for Carl Lusby" href="/listings/agent/carl-lusby/">Listings for Carl Lusby</a></li><li><a title="Listings for Dan Sargent" href="/listings/agent/dan-sargent/">Listings for Dan Sargent</a></li><li><a title="Listings for Teri Sargent Smith" href="/listings/agent/teri-sargent-smith/">Listings for Teri Sargent Smith</a></li></ul></div><div class="tab-pane" id="tab-34634"><ul class="category-searches"><li><a title="Below $100K" href="/below-100k/">Below $100K</a></li><li><a title="From $100K To $500K" href="/price/from-100k-to-500k/">From $100K To $500K</a></li><li><a title="From $500K To $750K" href="/price/from-500k-to-750k/">From $500K To $750K</a></li><li><a title="From $750K To $1M" href="/from-750k-to-1m/">From $750K To $1M</a></li><li><a title="Above $1M" href="/price/above-1m/">Above $1M</a></li></ul></div><div class="tab-pane" id="tab-34635"><ul class="category-searches"><li><a title="Commercial" href="/property-type/commercial/">Commercial</a></li><li><a title="Condo" href="/property-type/condo/">Condo</a></li><li><a title="House" href="/property-type/house/">House</a></li><li><a title="Land" href="/property-type/land/">Land</a></li><li><a title="Multi-Family" href="/property-type/multi-family/">Multi-Family</a></li></ul></div><div class="tab-pane" id="tab-34609"><ul class="category-searches"><li><a title="Downeast Maine Residential" href="/popular-searches/downeast-maine-residential-1/">Downeast Maine Residential</a></li><li><a title="Downeast Maine Waterfront" href="/popular-searches/downeast-main-waterfront/">Downeast Maine Waterfront</a></li><li><a title="Ellsworth Area Homes" href="/popular-searches/ellsworth-area-homes/">Ellsworth Area Homes</a></li><li><a title="Hancock County Residential" href="/popular-searches/hancock-county-residential/">Hancock County Residential</a></li><li><a title="Acadia National Park Region" href="/popular-searches/acadia-national-park-region/">Acadia National Park Region</a></li><li><a title="Maine Residential Properties" href="/popular-searches/maine-residential-properties/">Maine Residential Properties</a></li><li><a title="Maine Waterfront Homes" href="/popular-searches/maine-waterfront-homes/">Maine Waterfront Homes</a></li></ul></div></div><a href="/realestate/searchcategories/" title="View All Recommended Searches" class="usm-btn view-all">View all</a></div> 332 </div></aside> 333</div> 334<div class="footWrap"> 335 <aside id="footer"><div id="image-294078" class="widget image container"><a href="/" target="_self"><img src="https://d3w216np43fnr4.cloudfront.net/9775/294078/1.png?version=1717415585" alt="Footer Logo" width="173" height="56"/></a></div><ul class="footer-contact"> 336 <li class="phone"> 337 <p>Main Phone</p> 338 <a href="tel:207-667-2144" aria-label="Phone Number" class="phone">207-667-2144</a> 339 </li> 340 <li class="email"> 341 <p>Email Address</p> 342 <a href="mailto:[email protected]" class="email">[email protected]</a> 343 </li> 344</ul><div id="sociallinks-293938" class="widget sociallinks socialinkswidget flat container"><h3 class="widget-title">Connect</h3><ul class="fa-social-links sm40"><li><a target="_blank" title="Facebook" href="https://www.facebook.com/sargentrealestate" class="fa-social-links fsml-facebook" rel="noopener nofollow"><i class="fa fa-facebook"></i><span class="sr-only">Facebook</span></a></li></ul></div><div id="menuwidget-294869" class="widget menu menuwidget bare container"><h3 class="widget-title">Properties</h3><div class="widget-inner"><ul role="menubar"><li role="presentation" class=" menu-item-162962"><a href="/listings/" target="_self" role="menuitem">All Listings</a></li><li role="presentation" class=" menu-item-162963"><a href="/real-estate/our-listings/" target="_self" role="menuitem">Our Listings</a></li><li role="presentation" class=" menu-item-162964"><a href="/sold-listings/" target="_self" role="menuitem">Sold Listings</a></li></ul></div></div><div id="menuwidget-294870" class="widget menu menuwidget bare container"><h3 class="widget-title">Services</h3><div class="widget-inner"><ul role="menubar"><li role="presentation" class=" menu-item-162965"><a href="/buyers/" target="_self" role="menuitem">Buyers</a></li><li role="presentation" class=" menu-item-162966"><a href="/sellers/" target="_self" role="menuitem">Sellers</a></li><li role="presentation" class=" menu-item-162968"><a href="/sellers/market-analysis/" target="_self" role="menuitem">Market Analysis</a></li></ul></div></div><div id="menuwidget-294871" class="widget menu menuwidget bare container"><h3 class="widget-title">About Us</h3><div class="widget-inner"><ul role="menubar"><li role="presentation" class=" menu-item-162948"><a href="/our-agents/" target="_self" role="menuitem">Meet the Team</a></li><li role="presentation" class=" menu-item-162949"><a href="/testimonials/" target="_self" role="menuitem">Testimonials</a></li></ul></div></div></aside> 345</div> 346<div class="usmWrap"> 347 <aside id="group5"><div id="disclaimer-294076" class="widget disclaimer container"><div class="widget-inner"><div class="disclaimer feed-disclaimer feed-Maine"><p><img alt="" src="https://s3.amazonaws.com/files.usmre.com/ME_MAINE_API.png" style="width: 75px; height: 32px;" /></p> 348 349<p>Listing data is derived in whole or in part from the Maine IDX and is for consumers' personal, noncommercial use only. Dimensions are approximate and not guaranteed. All data should be independently verified. ©2026 Maine Real Estate Information System, Inc. All Rights Reserved. <img alt="equal opportunity housing logo" src="https://s3.amazonaws.com/files.usmre.com/equal_housing.png" /> <a href="/privacy-policy/" id="policylink">Privacy Policy</a><br /> 350<br /> 351Sargent Real Estate participates in ©2026 Maine Listings Internet Data Exchange program, allowing us to display other Maine IDX Participants' listings. This website does not display complete listings. Certain listings of other real estate brokerage firms have been excluded. Mortgage figures are estimates. Check with your bank or proposed mortgage company for actual interest rates. This product uses the FRED® API but is not endorsed or certified by the Federal Reserve Bank of St. Louis.</p> 352</div></div></div><div id="associations-293950" class="widget associations container"><div id="footer-logos" style="width: 100%"><div id="footer-logos-left-assoc"></div><div id="footer-logos-right-accred"></div><div id="footer-logos-right-custom"><img src="https://d3w216np43fnr4.cloudfront.net/9775/293950/1.jpg?version=1717412611" title="Association logos" alt="Association logos"/></div></div></div><div id="usmlogo-293949" class="widget usmlogo container"><a href="https://www.unionstreetmedia.com/?utm_campaign=passive&utm_medium=usm-badge&utm_source=www.sargentre.com&
352utm_content=real-estate" rel="nofollow noopener" title="VT NH Real Estate Web Design" target="_blank"><img src="https://d1mlo4htassgww.cloudfront.net/i/usmtag/usm-short-white.png?version=1791558679" alt="Union Street Media Logo"/></a></div><a class="privacy-link" href="/privacy-policy/">Privacy Policy</a></aside> 353</div><div id="progress"><i class="fa fa-spinner fa-spin"></i></div>
353<script type="text/javascript"> 354 require(["jquery"], function ($) { 355 var $navbarToggle = $("#menuwidget-293942 .navbar-toggle"); 356 357 $navbarToggle.click(function () { 358 var target = $(this).data("target"); 359 $(target).parent("nav").toggleClass("active"); 360 if ($(target).parent("nav").hasClass("active")) { 361 $("body").addClass("modal-open"); 362 } else { 363 $("body.modal-open").removeClass("modal-open"); 364 } 365 }); 366 367 $("#menuwidget-293942 .menu-close").click(function (e) { 368 $navbarToggle.click(); 369 e.preventDefault(); 370 }); 371 372 $("#menuwidget-293942 li.has-children ul li").click(function (event) { 373 event.stopPropagation(); 374 }); 375 }); 376 377 require(["jquery"], function ($) { 378 var $navbarToggle = $("#menuwidget-294069 .navbar-toggle"); 379 380 $navbarToggle.click(function () { 381 var target = $(this).data("target"); 382 $(target).parent("nav").toggleClass("active"); 383 if ($(target).parent("nav").hasClass("active")) { 384 $("body").addClass("modal-open"); 385 } else { 386 $("body.modal-open").removeClass("modal-open"); 387 } 388 }); 389 390 $("#menuwidget-294069 .menu-close").click(function (e) { 391 $navbarToggle.click(); 392 e.preventDefault(); 393 }); 394 395 $("#menuwidget-294069 li.has-children ul li").click(function (event) { 396 event.stopPropagation(); 397 }); 398 }); 399 400 require(["jquery", "bootstrap"], function ($) { 401 if ($.fn.carousel === undefined && jQuery.fn.carousel !== undefined) { 402 $ = jQuery; 403 } 404 $("#carousel-293941 .carousel").carousel({ 405 "interval": 10000 406 }); 407 $("#carousel-293941 .carousel-inner .item").each(function() { 408 this.style["-webkit-transition-duration"] = "1s"; 409 this.style["-moz-transition-duration"] = "1s"; 410 this.style["-o-transition-duration"] = "1s"; 411 this.style["transition-duration"] = "1s"; 412 }); 413 }); 414 415 // Searchable suggestions with a label values for the suggestion. 416 var SEARCHABLE_SUGGESTIONS_OPTIONS = { 417 usmCityAndState: '', 418 county: ' - County', 419 stateOrProvince: '', 420 usmNeighborhood: ' - Neighborhood', 421 postalCode: ' - Zip Code', 422 listingId: ' - MLS Number', 423 usmNonMlsId: ' - Internal ID', 424 elementarySchool: ' - Elementary School', 425 middleOrJuniorSchool: ' - Middle Or Junior High School', 426 usmArea: ' - Area', 427 address: ' - Address', 428 highSchool: ' - High School', 429 highSchoolDistrict: ' - School District', 430 usmVillage: ' - Village', 431 usmSubdivision: ' - Subdivision', 432 streetName: ' - Street', 433 usmComplex: ' - Complex', 434 usmPropertyName: ' - Property Name', 435 mlsAreaMinor: ' - MLS Area Minor', 436 mlsAreaMajor: ' - MLS Area Major', 437 offMarketData: ' - Off Market', 438 title: 'title', 439 agent: ' - Agent', 440 team: ' - Team', 441 } 442 443 var displayWaterBodyNameSuggestions = ''; 444 var showAgentsSearch = '0'; 445 446 if (displayWaterBodyNameSuggestions) { 447 SEARCHABLE_SUGGESTIONS_OPTIONS.waterBodyName = ' - Water Body Name'; 448 } 449 450 var suggestionResponse = null; 451 require(['jquery'], function($) { 452 /** 453 * Get current search mode based on active button 454 */ 455 function getCurrentSearchMode() { 456 if (showAgentsSearch === '1' && $('#agents-293995').hasClass('active')) { 457 return 'agents'; 458 } else if ($('#rentals-property-types-293995').hasClass('active')) { 459 return 'rentals'; 460 } else { 461 return 'sales'; 462 } 463 } 464 465 /** 466 * Filter out not supported suggestions. 467 * 468 * @param suggestions 469 * @returns {[]} 470 */ 471 function sanitizeSuggestions(suggestions) { 472 const sanitizedSuggestions = []; 473 if (suggestions && Array.isArray(suggestions)) { 474 for (var suggestionIndex in suggestions) { 475 var suggestion = suggestions[suggestionIndex]; 476 477 var suggestionType = suggestion.type; 478 // Filter out suggestions that are not currently supported 479 if (!SEARCHABLE_SUGGESTIONS_OPTIONS.hasOwnProperty(suggestionType)) { 480 continue; 481 } 482 483 sanitizedSuggestions.push(suggestion); 484 } 485 return sanitizedSuggestions; 486 } 487 488 return []; 489 } 490 491 /** 492 * Transform agents API response to suggestions format 493 */ 494 function transformAgentsToSuggestions(responseData) { 495 if (!Array.isArray(responseData?.agents) || !Array.isArray(responseData?.teams)) { 496 return []; 497 } 498 const data = [ 499 ...responseData.agents.map(agent => ({ ...agent, type: 'agent' })), 500 ...responseData.teams.map(team => ({ ...team, type: 'team' })) 501 ]; 502 503 return data.map((item) => ({ 504 label: item.name, 505 value: item.name, 506 type: item.type, 507 id: item.id, 508 slug: item.slug, 509 })); 510 } 511 512 /** 513 * Check if the parameter looks like an address (starts with digits followed by words) 514 */ 515 function shouldReduceByAddress(value) { 516 var addressPattern = /^\d+\s+\w+/i; 517 return addressPattern.test(value.trim()); 518 } 519 520 function fetchSuggestions(request, response) { 521 var param = request.term; 522 var requestPrefix = ''; 523 var isOMPEnabled = requestPrefix === 'OMP:'; 524 var searchMode = getCurrentSearchMode(); 525 526 // Restrict search length to minimum 2 characters before sending the request. 527 if (param.length < 2) { 528 // We do not store and show recent searches if OMP is enabled or in agents mode 529 var isRecentSearchesDisabled = isOMPEnabled || searchMode === 'agents'; 530 var recentSearches = isRecentSearchesDisabled ? [] : JSON.parse(window.localStorage.getItem('lastSearches')); 531 532 if (recentSearches && recentSearches.length > 0) { 533 recentSearches.unshift({label: 'Recent Searches', value: 'Recent Searches', type: 'title'}) 534 response(recentSearches); 535 } else { 536 response([{label: 'The search word must be at least 3 characters long.', noResults: true}]); 537 } 538 } else { 539 // Different API endpoints based on search mode 540 var baseUrl = ''; 541 var requestData = {}; 542 543 if (searchMode === 'agents') { 544 baseUrl = '/api/suggestions/teams/'; 545 requestData = { 546 q: param, 547 }; 548 } else { 549 baseUrl = '/api/suggestions/'; 550 requestData = { 551 q: requestPrefix + param 552 }; 553 554 if (shouldReduceByAddress(param)) { 555 requestData.reduce = 'usmFullAddress'; 556 } 557 } 558 559 $.ajax({ 560 dataType: 'json', 561 url: baseUrl, 562 data: requestData, 563 type: 'GET', 564 timeout: 10000, 565 success: function(data) { 566 var suggestions = []; 567 568 if (searchMode === 'agents') { 569 // Transform agents response 570 suggestions = transformAgentsToSuggestions(data); 571 } else { 572 // Regular suggestions 573 if (data.suggestions && data.suggestions.length > 0) { 574 suggestions = sanitizeSuggestions(data.suggestions); 575 } 576 } 577 578 if (suggestions.length > 0) { 579 // Set the suggestion response to the first suggestion 580 suggestionResponse = suggestions[0]; 581 response(suggestions); 582 } else { 583 // No results from API 584 var noResultsMessage = searchMode === 'agents' ? 'No agents found.' : 'Enter another region.'; 585 response([{label: noResultsMessage, noResults: true}]); 586 } 587 }, 588 error: function() { 589 response([{label: 'Problem contacting server, please refresh and try again.', noResults: true}]); 590 $('.autosuggest-loader').removeClass('fal fa-spinner fa-pulse'); 591 $('.autosuggest-loader').addClass('fal fa-exclamation-triangle'); 592 } 593 }); 594 } 595 } 596 597 $('#autosuggest-search-query-293995').autocomplete({ 598 source: function(request, response) { 599 fetchSuggestions(request, response); 600 }, 601 minLength: 0, 602 open: function() {
603 inputWidth = $('#autosuggest-search-query-293995').outerWidth(); 604 $('ul.ui-menu').css( 'width', inputWidth ); 605 }, 606 search: function(event, ui) { 607 $('.autosuggest-loader').addClass('fal fa-spinner fa-pulse'); 608 }, 609 response: function(event, ui) { 610 $('.autosuggest-loader').removeClass('fal fa-spinner fa-pulse'); 611 }, 612 position: { 613 offset: '0 -6' 614 }, 615 autoFocus: true, 616 messages: { 617 //These messages are for accessability and are not visible in the UI (with proper styling). 618 noResults: 'No options found.', 619 results: function(amount) { 620 return amount + (amount > 1 ? ' results ' : ' result ') + 'found.' 621 } 622 }, 623 delay: 300 624 }).focus(function() { 625 $(this).autocomplete('search', $(this).val()); 626 }).data('ui-autocomplete')._renderItem = function(ul, item) { 627 let txt = String(item.label); 628 629 if (item.type) { 630 txt = txt.replace(new RegExp(this.term, 'gi'),'<b>$&</b>'); 631 } 632 633 var type = item.type; 634 635 if (SEARCHABLE_SUGGESTIONS_OPTIONS.hasOwnProperty(type)) { 636 type = SEARCHABLE_SUGGESTIONS_OPTIONS[type]; 637 638 if (type == 'listingId') { 639 txt = txt.toUpperCase(); 640 } 641 } else { 642 type = ''; 643 } 644 645 if (type === 'title') { 646 return $('<li></li>') 647 .append('<div class="item-title"><b>' + txt + '</b></div>') 648 .appendTo(ul); 649 } 650 651 var status = ''; 652 if (item.standardStatus && item.standardStatus.length === 1 && item.standardStatus[0] === 'Closed') { 653 status = ' <span class="ui-status">Sold</span>'; 654 } 655 656 const itemNoResultsClassName = !!item?.noResults ? 'autosuggest-item-no-result' : ''; 657 658 return $(`<li class='${itemNoResultsClassName}'></li>`) 659 .data('ui-autocomplete-item', item) 660 .append('<a>' + txt + '<span>' + type + '</span>' + status + '</a>') 661 .appendTo(ul); 662 }; 663 }); 664 665 require(['jquery'], function($) { 666 var stateMap = JSON.parse('{"Alabama":"AL","Alaska":"AK","Arizona":"AZ","Arkansas":"AR","Bahamas":"BS","California":"CA","Colorado":"CO","Connecticut":"CT","Delaware":"DE","D.C.":"DC","Florida":"FL","Georgia":"GA","Hawaii":"HI","Idaho":"ID","Illinois":"IL","Indiana":"IN","Iowa":"IA","Kansas":"KS","Kentucky":"KY","Louisiana":"LA","Maine":"ME","Maryland":"MD","Massachusetts":"MA","Michigan":"MI","Minnesota":"MN","Mississippi":"MS","Missouri":"MO","Montana":"MT","Nebraska":"NE","Nevada":"NV","New Hampshire":"NH","New Jersey":"NJ","New Mexico":"NM","New York":"NY","North Carolina":"NC","North Dakota":"ND","Ohio":"OH","Oklahoma":"OK","Oregon":"OR","Pennsylvania":"PA","Rhode Island":"RI","South Carolina":"SC","South Dakota":"SD","Tennessee":"TN","Texas":"TX","Utah":"UT","Vermont":"VT","Virginia":"VA","Washington":"WA","West Virginia":"WV","Wisconsin":"WI","Wyoming":"WY","Alberta":"AB","British Columbia":"BC","Manitoba":"MB","New Brunswick":"NB","Newfoundland and Labrador":"NL","Nova Scotia":"NS","Ontario":"ON","Prince Edward Island":"PE","Quebec":"QC","Saskatchewan":"SK"}'); 667 const MAX_RECENT_SEARCHES_CACHED = 5; 668 var showAgentsSearch = '0'; 669 670 function getCurrentSearchMode() { 671 if (showAgentsSearch === '1' && $('#agents-293995').hasClass('active')) { 672 return 'agents'; 673 } else if ($('#rentals-property-types-293995').hasClass('active')) { 674 return 'rentals'; 675 } else { 676 return 'sales'; 677 } 678 } 679 680 /** 681 * Update placeholder based on current search mode 682 */ 683 function updatePlaceholder() { 684 var searchMode = getCurrentSearchMode(); 685 var searchInput = $('#autosuggest-search-query-293995'); 686 var placeholder = ''; 687 688 switch(searchMode) { 689 case 'agents': 690 placeholder = 'Search for agents by name'; 691 break; 692 case 'rentals': 693 case 'sales': 694 default: 695 placeholder = `Search homes by address, city, ZIP code and more`; 696 break; 697 } 698 699 searchInput.attr('placeholder', placeholder); 700 } 701 702 function getStateAbbreviation(stateName) { 703 if (!stateName) { 704 return null; 705 } 706 707 if (!stateMap.hasOwnProperty(stateName)) { 708 return null; 709 } 710 711 return stateMap[stateName]; 712 } 713
714 function goToDetailView(filter) { 715 var baseUrl = '/api/listings/'; 716 // We should use this replace in order to divide params into array in the ListingSearch.php in the V2 717 filter = filter.replace(/\S&\S/g, function (tmpVal) { 718 return tmpVal.replace(/&/g, '#'); 719 }); 720 filter = encodeURIComponent(filter); 721 $.ajax({ 722 dataType: 'json', 723 url: baseUrl + '?suggestionFilter=' + filter, 724 type: 'GET', 725 success: function(data) { 726 if (!Array.isArray(data.listings)) { 727 return; 728 } 729 730 if (data.listings.length === 1) { 731 window.location.href = data.listings[0].usmDetailPath; 732 733 return; 734 } 735 736 if (data.listings.length > 1) { 737 window.location.href = '/listings/' + '?suggestionFilter=' + filter; 738 739 return; 740 } 741 } 742 }); 743 } 744 745 function getCityAndStatePath(value) { 746 var array = value.split(' '); 747 748 const state = array.pop().toLowerCase(); 749 const city = array.join('-').toLowerCase(); 750 751 return state + '/' + city + '/'; 752 } 753 754 function parseFilterString(filterString) { 755 var filters = {}; 756 if (!filterString) { 757 return filters; 758 } 759 filterString.split('&').forEach(function(f) { 760 var parts = f.split('='); 761 if (parts.length >= 2) { 762 var name = parts[0].match(/\[(.*?)\]/)?.[1]; 763 if (name) { 764 filters[name] = decodeURIComponent(parts.slice(1).join('=')); 765 } 766 } 767 }); 768 return filters; 769 } 770 771 function getStateAbbrFromFilterValue(stateValue) { 772 if (!stateValue) { 773 return null; 774 } 775 var abbr = getStateAbbreviation(stateValue); 776 if (abbr) { 777 return abbr.toLowerCase(); 778 } 779 if (stateValue.length === 2) { 780 return stateValue.toLowerCase(); 781 } 782 return null; 783 } 784 785 /** 786 * Build url with path based on the selected suggestion. 787 * 788 */ 789 function getUrlPath(suggestion) { 790 let path = ''; 791 switch (suggestion.type) { 792 case 'cityAndState': 793 path += getCityAndStatePath(suggestion.value); 794 795 return path; 796 case 'stateOrProvince': 797 var stateAbbreviation = getStateAbbreviation(suggestion.value); 798 799 if (stateAbbreviation && stateAbbreviation.length == 2) { 800 path += stateAbbreviation.toLowerCase() + '/'; 801 } 802 803 return path; 804 case 'neighborhood': 805 case 'village': 806 path += convertFilterString(suggestion.filter); 807 808 return path; 809 case 'county': { 810 var filters = parseFilterString(suggestion.filter); 811 var county = filters.county; 812 var stateAbbr = getStateAbbrFromFilterValue(filters.stateOrProvince); 813 if (county && stateAbbr) { 814 var countySlug = county.replace(/\s+county$/i, '').toLowerCase().replace(/\s+/g, '-') + '-county'; 815 path = stateAbbr + '/' + countySlug + '/'; 816 } 817 return path; 818 } 819 case 'postalCode': { 820 var filters = parseFilterString(suggestion.filter); 821 var postalCode = filters.postalCode; 822 var stateAbbr = getStateAbbrFromFilterValue(filters.stateOrProvince); 823 if (postalCode && stateAbbr) { 824 path = stateAbbr + '/' + postalCode + '/'; 825 } 826 return path; 827 } 828 default: 829 return path; 830 } 831 } 832 833 function convertFilterString(filterString) { 834 if (!filterString) { 835 return ''; 836 } 837 838 const filters = filterString.split('&'); 839 const suggestionFilters = filters.map(filter => { 840 const filterPart = filter.split('='); 841 842 if (filterPart.length !== 2) { 843 return null; 844 } 845 846 const [key, value] = filterPart; 847 const name = key.match(/\[(.*?)\]/)?.[1]; 848 849 if (!name) return null; 850 851 return name === 'cityAndState' || name === 'usmCityAndState' 852 ? getCityAndStatePath(value) + '?' 853 : name + '=' + value ; 854 }); 855 856 return getPathFromFilters(suggestionFilters); 857 } 858 859 function getPathFromFilters(suggestionFilters) { 860 if (!suggestionFilters || suggestionFilters.length === 0) { 861 return ''; 862 } 863 864 const cityAndStateItem = suggestionFilters.find(item => item.includes('/?')); 865 866 if (!cityAndStateItem) { 867 return '?' + suggestionFilters.join('&'); 868 } 869 870 const filtersWithoutCityAndState = suggestionFilters.filter(item => item !== cityAndStateItem); 871 872 return cityAndStateItem + filtersWithoutCityAndState.join('&'); 873 } 874 875 function getPropertyDetailPathFromOffMarketSuggestion(suggestion) { 876 if (!suggestion) { 877 return ''; 878 } 879 880 const { value, filter } = suggestion; 881 const startIndex = filter?.indexOf('=') + 1; 882 const usmPid = filter?.substring(startIndex); 883 884 const address = value?.split(' ') 885 ?.map(function(word) { return word.toLowerCase() }) 886 ?.join('-') || ''; 887 888 return '/property/' + address + '/' + usmPid + '/'; 889 }; 890 891 function submitSearch(e, item) { 892 e.preventDefault(); 893 894 if (!item) { 895 return; 896 } 897 898 // If the item has no type, it's an error message and shouldn't send anywhere 899 if (!item.type) { 900 return; 901 } 902 903 var searchMode = getCurrentSearchMode(); 904
905 // Finish the input in case a selection was made without completing it 906 $('#autosuggest-search-query').val(item.type === 'listingId' ? item.value.toUpperCase() : item.label); 907 908 if (item.type === 'agent' || item.type === 'team') { 909 window.location.href = `/realestate/${item.type}/${item.slug}/`; 910 911 return; 912 } 913 914 // Send to detail view if MLS Number 915 if (item.type === 'listingId' || item.type === 'address' || item.type === 'usmPropertyName' || item.type === 'usmNonMlsId') { 916 var filter = item.filter; 917 918 if (item.standardStatus && item.standardStatus.length > 0) { 919 var statusList = Array.isArray(item.standardStatus) 920 ? item.standardStatus 921 : [item.standardStatus]; 922 // It is very common for listings other than 'Active 'to being filtered out, so we need to add this filter to ensure that they are returned by the listings api 923 filter += (filter !== '' ? '&' : '') + 'filter[standardStatus]=' + statusList.join(','); 924 } 925 goToDetailView(filter); 926 927 return; 928 } else if (item.type === 'offMarketData') { 929 const propertyPath = getPropertyDetailPathFromOffMarketSuggestion(item); 930 931 window.location.href = propertyPath; 932 933 return; 934 } 935 936 item.type = item.type.replace('usmCityAndState', 'cityAndState') 937 .replace('usmNeighborhood', 'neighborhood') 938 .replace('usmVillage', 'village') 939 .replace('usmSubdivision', 'subdivision') 940 .replace('usmComplex', 'complex'); 941 942 if (item.type === 'cityAndState') { 943 item.value = item.value.replace(', ', ' '); 944 } 945 946 path = getUrlPath(item); 947 948 // Don't save agents to recent searches 949 if (searchMode !== 'agents') { 950 var searches = [Object.assign({}, item)]; 951 var storedSearches = JSON.parse(localStorage.getItem('lastSearches')); 952 953 if (storedSearches) { 954 searches = storedSearches.filter(function(storedSearch) { 955 storedSearch.value !== item.value 956 }); 957 storedSearches = searches.length <= (MAX_RECENT_SEARCHES_CACHED - 1) 958 ? searches 959 : searches.slice(0,-1); 960 searches = [Object.assign({}, item), ...storedSearches]; 961 } 962 963 localStorage.setItem('lastSearches', JSON.stringify(searches)); 964 } 965 966 var propertyTypeFilter = ''; 967 var displaySalesRentalsToggle = ''; 968 969 if (displaySalesRentalsToggle && searchMode !== 'agents') { 970 var forSalePropertyTypes = ''; 971 var rentalsPropertyTypes = ''; 972 var forSaleLabel = 'Sales'; 973 var rentalsLabel = 'Rentals'; 974 var agentsLabel = ''; 975 var propertyTypes = $('#sales-property-types-293995').hasClass('active') ? forSalePropertyTypes : rentalsPropertyTypes; 976 977 if (propertyTypes) { 978 var urlPathTypes = ['cityAndState', 'county', 'postalCode']; 979 if (urlPathTypes.indexOf(item.type) !== -1 && !propertyTypes.includes(',')) { 980 path = path + propertyTypes.toLowerCase() + '/'; 981 } else { 982 propertyTypeFilter = 'propertyTypes=' + propertyTypes; 983 } 984 } 985 } 986 987 var fullPath = ''; 988 if (path.length > 0) { 989 var separator = path.indexOf('?') !== -1 ? '&' : '?'; 990 fullPath = '/listings/' + path + separator +'' + propertyTypeFilter; 991 } else { 992 fullPath = '/listings/?' + item.type + '=' + encodeURIComponent(item.value) + '&' + propertyTypeFilter; 993 } 994 995 // Remove trailing ? or & 996 const lastChar = fullPath.charAt(fullPath.length - 1); 997 if (lastChar === '?' || lastChar === '&') { 998 fullPath = fullPath.slice(0, -1); 999 } 1000 1001 window.location.href = fullPath; 1002 } 1003 1004 $('.widget-autosuggest').on('submit', function(e) { 1005 submitSearch(e, suggestionResponse); 1006 }); 1007 1008 $('.widget-autosuggest').on('autocompleteselect', function(e, ui) { 1009 submitSearch(e, ui.item); 1010 }); 1011 1012 var salesPropertyTypesButton = $('#sales-property-types-293995'); 1013 var rentalPropertyTypesButton = $('#rentals-property-types-293995'); 1014 var agentsButton = $('#agents-293995'); 1015 1016 // Function to clear search and refresh autocomplete 1017 function clearSearchAndRefresh() { 1018 $('#autosuggest-search-query-293995').val('').autocomplete('search', ''); 1019 } 1020
1021 const buttons = [salesPropertyTypesButton, rentalPropertyTypesButton]; 1022 if (showAgentsSearch === '1') { 1023 buttons.push(agentsButton); 1024 } 1025 1026 function setActiveButton(activeButton, buttons) { 1027 $.each(buttons, function(index, btn) { 1028 btn.removeClass('active'); 1029 }); 1030 activeButton.addClass('active'); 1031 updatePlaceholder(); 1032 clearSearchAndRefresh(); 1033 } 1034 1035 salesPropertyTypesButton.on('click', function() { 1036 setActiveButton(salesPropertyTypesButton, buttons); 1037 }); 1038 1039 rentalPropertyTypesButton.on('click', function() { 1040 setActiveButton(rentalPropertyTypesButton, buttons); 1041 }); 1042 1043 // Only add event handler if agents search is enabled 1044 if (showAgentsSearch === '1') { 1045 agentsButton.on('click', function() {
1046 setActiveButton(agentsButton, buttons); 1047 }); 1048 } 1049 1050 // Initialize placeholder on document ready 1051 $(document).ready(function() { 1052 updatePlaceholder(); 1053 }); 1054 }); 1055 1056 require(["jquery", "usm", "usm.modalform", "usm.analytics"], function($, usm) { 1057 var $form = $('form#aaq-294075'); 1058 1059 var options = { 1060 postSuccess: function (e) { 1061 if (typeof dataLayer !== 'undefined') { 1062 dataLayer.push({"event":"Contact_Form","form_name":"Ask A Question - General"}); 1063 } 1064 } 1065 }; 1066 1067 usm.modalForm.addValidation($form, options); 1068 }); 1069 1070 require(["jquery", "usm", "bootstrap"], function ($, usm) { 1071 if (usm.touchSupport) { 1072 require(["bootstraptabcollapse"], function() { 1073 $(document).ready(function() { 1074 var tab = $("#recsearch-293916 .nav-tabs"); 1075 1076 if (tab) { 1077 tab.tabCollapse(); 1078 1079 //It is a specific task for adding category class for the rec search items by category name 1080 tab.on("shown-accordion.bs.tabcollapse", function(e) { 1081 let tabPanel = document.querySelectorAll("#recsearch-293916 .panel-group .panel"); 1082 1083 if (tabPanel) { 1084 let classList = []; 1085 1086 e.target.querySelectorAll("li").forEach((li) => { 1087 li.className.split(' ').forEach((className) => { 1088 if (!classList.includes(className) && className.indexOf("recsearch-category-") !== -1) { 1089 classList.push(className); 1090 } 1091 }); 1092 }); 1093 1094 tabPanel.forEach((panel, index) => { 1095 if (!panel.classList.contains(classList[index])) { 1096 panel.classList.add(classList[index]); 1097 } 1098 }); 1099 } 1100 }); 1101 } 1102 }); 1103 }); 1104 } 1105 }); 1106 var URI = "/user/login/";require(['usm', 'usm.user'], function (usm) { usm.user.setModal(true); });require(["jquery"], function ($) { $("body").addClass("js"); });</script>
1106<script type="text/javascript">require(["https://d1nn5t56all1qd.cloudfront.net/9775/js/custom.js?version=1719395006"]);</script>
1106</body> 1107</html><!-- You're on: Some other server - 172.18.22.9 - www.sargentre.com Time: 0.959 -->
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.